py.lib

Yohn Y. 2022-08-18 Parent:fe4a96d06243

35:ab4cf9f4f10a Go to Latest

py.lib/log/slog_console.py

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

History
1 # coding: utf-8
2 """ Логирование на консоль
4 Метки в журнале о уровне сообщения:
5 "`": Debug
6 ".": Info
7 "*": Warning
8 "!": Error
9 "#": Alert
10 """
12 from time import monotonic
13 from datetime import timedelta
14 from sys import exc_info, stderr, stdout
15 from traceback import extract_tb, extract_stack
18 class Timing(object):
19 def __init__(self, name=None):
20 if name is None:
21 self.prefix = ''
22 else:
23 self.prefix = '%s :: ' % name
24 self.tsAll = monotonic()
25 self.ts = self.tsAll
27 def getTime(self):
28 return monotonic() - self.ts
30 def reset(self):
31 self.ts = monotonic()
32 self.tsAll = self.ts
34 def __str__(self):
35 ts = monotonic()
36 return self.prefix + '%s(%.4f)' % (timedelta(seconds=(ts - self.tsAll)), ts - self.ts)
38 def __call__(self, msg):
39 _buf = '%s | %s' % (self, msg)
40 self.ts = monotonic()
41 return _buf
44 class ConsoleLog(object):
45 def __init__(self, appname='main'):
46 self.appname = appname
48 @staticmethod
49 def _write(ItrCntnt):
50 for l in ItrCntnt:
51 print(l)
53 def __call__(self, msg):
54 self._write(map(
55 lambda x: '%3s | %s :: %s' % ('.', self.appname, x),
56 str(msg).splitlines()
57 ))
59 def err(self, msg):
60 self._write(map(
61 lambda x: '%3s | %s :: %s' % ('!', self.appname, x),
62 str(msg).splitlines()
63 ))
65 def warn(self, msg):
66 self._write(map(
67 lambda x: '%3s | %s :: %s' % ('*', self.appname, x),
68 str(msg).splitlines()
69 ))
71 def alert(self, msg):
72 self._write(map(
73 lambda x: '%3s | %s :: %s' % ('#', self.appname, x),
74 str(msg).splitlines()
75 ))
77 def debug(self, msg):
78 self._write(map(
79 lambda x: '%3s | %s :: %s' % ('`', self.appname, x),
80 str(msg).splitlines()
81 ))
83 @staticmethod
84 def getTiming(name=None):
85 return Timing(name)
87 def sublog(self, name):
88 return self.__class__('%s/%s' % (self.appname, name))
90 def excpt(self, msg, eClass=None, eObj=None, eTb=None, stack_skip=0):
91 if eClass is None:
92 eClass, eObj, eTb = exc_info()
94 tbData_tb = list(extract_tb(eTb))[::-1]
95 tbData_stack = list(extract_stack())[::-1][(2 + stack_skip):]
96 self.err(msg)
97 self.err('--- EXCEPTION ---')
98 self.err(' %s (%s)' % (eClass.__name__, eObj))
99 self.err('--- TRACEBACK ---')
100 for _tbFile, _tbLine, _tbFunc, _tbText in tbData_tb:
101 self.err('File: %s, line %s in %s' % (_tbFile, _tbLine, _tbFunc))
102 self.err(' %s' % _tbText)
103 self.err('>>> Exception Handler <<<')
104 for _tbFile, _tbLine, _tbFunc, _tbText in tbData_stack:
105 self.err('File: %s, line %s in %s' % (_tbFile, _tbLine, _tbFunc))
106 self.err(' %s' % _tbText)
107 self.err('--- END EXCEPTION ---')
110 class StderrLog(ConsoleLog):
111 @staticmethod
112 def _write(msgItr):
113 for l in msgItr:
114 stderr.write('%s\n' % l)
115 stderr.flush()
118 class StdoutLog(ConsoleLog):
119 @staticmethod
120 def _write(msgItr):
121 for l in msgItr:
122 stdout.write('%s\n' % l)
123 stdout.flush()