py.lib
13:cab7fedf8432
Go to Latest
py.lib/log/slog_syslogger.py
.. Реструктуризация
4 Логирование в системный журнал Unix
6 Метки в журнале о уровне сообщения:
15 from sys import exc_info
17 from traceback import extract_tb, extract_stack
18 from datetime import timedelta
21 'auth': syslog.LOG_AUTH,
22 'authpriv': syslog.LOG_AUTH,
23 'cron': syslog.LOG_CRON,
24 'daemon': syslog.LOG_DAEMON,
25 'ftp': syslog.LOG_DAEMON,
26 'kern': syslog.LOG_KERN,
27 'lpr': syslog.LOG_LPR,
28 'mail': syslog.LOG_MAIL,
29 'news': syslog.LOG_NEWS,
30 'syslog': syslog.LOG_SYSLOG,
31 'user': syslog.LOG_USER,
32 'uucp': syslog.LOG_UUCP,
33 'local0': syslog.LOG_LOCAL0,
34 'local1': syslog.LOG_LOCAL1,
35 'local2': syslog.LOG_LOCAL2,
36 'local3': syslog.LOG_LOCAL3,
37 'local4': syslog.LOG_LOCAL4,
38 'local5': syslog.LOG_LOCAL5,
39 'local6': syslog.LOG_LOCAL6,
40 'local7': syslog.LOG_LOCAL7
43 class LoggerError(Exception): pass
47 FACILITY = LOG_FACILITY['user']
50 def log_prep(ident, facility='user'):
52 if not facility.lower() in LOG_FACILITY:
53 raise LoggerError('Unknown facility')
55 syslog.openlog(ident, syslog.LOG_PID)
57 FACILITY = LOG_FACILITY[facility]
61 def __init__(self, name=None):
65 self.prefix = '%s :: ' % name
70 return time() - self.ts
78 return self.prefix + '%s(%.4f)' % (timedelta(seconds=(ts - self.tsAll)), ts - self.ts)
80 def __call__(self, msg):
81 _buf = '%s | %s' % (self, msg)
86 class SysLogger(object):
90 def get_timing(name=None):
93 def __init__(self, prefix, facility=FACILITY):
94 self.prefix = str(prefix)
95 self.facility = facility
97 def _write(self, flag, mark, msg):
98 for l in str(msg).splitlines():
99 syslog.syslog(self.facility | flag, '%s: %s %s' % (self.prefix, mark, l))
101 def __call__(self, msg):
102 self._write(syslog.LOG_INFO, '.', msg)
105 self._write(syslog.LOG_ERR, '!', msg)
108 self._write(syslog.LOG_WARNING, '*', msg)
110 def debug(self, msg):
111 self._write(syslog.LOG_DEBUG, '`', msg)
113 def alert(self, msg):
114 self._write(syslog.LOG_ALERT, '#', msg)
116 def sublog(self, prefix):
117 return self.__class__('%s/%s' % (self.prefix, prefix), self.facility)
119 def excpt(self, msg, eClass=None, eObj=None, eTb=None, stack_skip=0):
121 eClass, eObj, eTb = exc_info()
124 # Если вдруг вызываем без произошедшего исключения
127 tbData_tb = list(extract_tb(eTb))[::-1]
128 tbData_stack = list(extract_stack())[::-1][(2 + stack_skip):]
132 self.err('--- EXCEPTION ---')
133 self.err(' %s (%s)' % (eClass.__name__, eObj))
135 self.err('--- TRACEBACK ---')
136 for _tbFile, _tbLine, _tbFunc, _tbText in tbData_tb:
137 self.err('File: %s, line %s in %s' % (_tbFile, _tbLine, _tbFunc))
138 self.err(' %s' % _tbText)
140 self.err('>>> Exception Handler <<<')
141 for _tbFile, _tbLine, _tbFunc, _tbText in tbData_stack:
142 self.err('File: %s, line %s in %s' % (_tbFile, _tbLine, _tbFunc))
143 self.err(' %s' % _tbText)
145 self.err('--- END EXCEPTION ---')