py.lib

Yohn Y. 2021-02-21 Parent:cab7fedf8432 Child:1668cc57225b

17:10227cc154fa Go to Latest

py.lib/log/slog_syslogger_tiny.py

* Исправление ряда тупых ошибок в миграторе

History
awgur@11 1 # coding: utf-8
awgur@11 2 """
awgur@11 3 Тривиальная реализация сислоггера без блэк-джека и поэтесс
awgur@11 4
awgur@11 5 Метки в журнале о уровне сообщения:
awgur@11 6 "`": Debug
awgur@11 7 ".": Info
awgur@11 8 "*": Warning
awgur@11 9 "!": Error
awgur@11 10 "#": Alert
awgur@11 11
awgur@11 12 """
awgur@11 13 from time import time
awgur@11 14 from datetime import timedelta
awgur@11 15
awgur@11 16 import syslog
awgur@11 17 from traceback import extract_tb, extract_stack
awgur@11 18 from sys import exc_info
awgur@11 19
awgur@11 20
awgur@11 21 class Timing(object):
awgur@11 22 def __init__(self, name=None):
awgur@11 23 if name is None:
awgur@11 24 self.prefix = ''
awgur@11 25 else:
awgur@11 26 self.prefix = '%s :: ' % name
awgur@11 27 self.tsAll = time()
awgur@11 28 self.ts = self.tsAll
awgur@11 29
awgur@11 30 def getTime(self):
awgur@11 31 return time() - self.ts
awgur@11 32
awgur@11 33 def reset(self):
awgur@11 34 self.ts = time()
awgur@11 35 self.tsAll = self.ts
awgur@11 36
awgur@11 37 def __str__(self):
awgur@11 38 ts = time()
awgur@11 39 return self.prefix + '%s(%.4f)' % (timedelta(seconds=(ts - self.tsAll)), ts - self.ts)
awgur@11 40
awgur@11 41 def __call__(self, msg):
awgur@11 42 _buf = '%s | %s' % (self, msg)
awgur@11 43 self.ts = time()
awgur@11 44 return _buf
awgur@11 45
awgur@11 46
awgur@11 47 class SimpleSysLogger(object):
awgur@11 48 @staticmethod
awgur@11 49 def initSyslog(ident):
awgur@11 50 syslog.openlog(ident, syslog.LOG_PID)
awgur@11 51
awgur@11 52 @staticmethod
awgur@11 53 def getTiming(name=None):
awgur@11 54 return Timing(name)
awgur@11 55
awgur@11 56 def __init__(self, prefix, facility=syslog.LOG_USER):
awgur@11 57 self.prefix = str(prefix)
awgur@11 58 self.facility = facility
awgur@11 59
awgur@11 60 def _write(self, flag, mark, msg):
awgur@11 61 for l in str(msg).splitlines():
awgur@11 62 syslog.syslog(self.facility | flag, '%s: %s %s' % (self.prefix, mark, l))
awgur@11 63
awgur@11 64 def __call__(self, msg):
awgur@11 65 self._write(syslog.LOG_INFO, '.', msg)
awgur@11 66
awgur@11 67 def err(self, msg):
awgur@11 68 self._write(syslog.LOG_ERR, '!', msg)
awgur@11 69
awgur@11 70 def warn(self, msg):
awgur@11 71 self._write(syslog.LOG_WARNING, '*', msg)
awgur@11 72
awgur@11 73 def debug(self, msg):
awgur@11 74 self._write(syslog.LOG_DEBUG, '`', msg)
awgur@11 75
awgur@11 76 def alert(self, msg):
awgur@11 77 self._write(syslog.LOG_ALERT, '#', msg)
awgur@11 78
awgur@11 79 def sublog(self, prefix):
awgur@11 80 return self.__class__('%s/%s' % (self.prefix, prefix), self.facility)
awgur@11 81
awgur@11 82 def excpt(self, msg, eClass=None, eObj=None, eTb=None, stack_skip=0):
awgur@11 83 if eClass is None:
awgur@11 84 eClass, eObj, eTb = exc_info()
awgur@11 85
awgur@11 86 tbData_tb = list(extract_tb(eTb))[::-1]
awgur@11 87 tbData_stack = list(extract_stack())[::-1][(2 + stack_skip):]
awgur@11 88 self.err(msg)
awgur@11 89 self.err('--- EXCEPTION ---')
awgur@11 90 self.err(' %s (%s)' % (eClass.__name__, eObj))
awgur@11 91 self.err('--- TRACEBACK ---')
awgur@11 92 for _tbFile, _tbLine, _tbFunc, _tbText in tbData_tb:
awgur@11 93 self.err('File: %s, line %s in %s' % (_tbFile, _tbLine, _tbFunc))
awgur@11 94 self.err(' %s' % _tbText)
awgur@11 95 self.err('>>> Exception Handler <<<')
awgur@11 96 for _tbFile, _tbLine, _tbFunc, _tbText in tbData_stack:
awgur@11 97 self.err('File: %s, line %s in %s' % (_tbFile, _tbLine, _tbFunc))
awgur@11 98 self.err(' %s' % _tbText)
awgur@12 99 self.err('--- END EXCEPTION ---')