py.lib.aw_log
6:9155a66edb31
Go to Latest
py.lib.aw_log/src/aw_log/__init__.py
.. 1.202410.1
. Изменение структуры проекта под новые вызовы SDK Python
. Убраны версии с отдельный файлов, они кажутся избыточними.
* Изменено формирование записей о исключении, для большего соответствия логике журналирования
- Перенос `NullLog` на уровень модуля и повышение его универсальности для замены других классов.
2 """ Реализация классов логирования
4 Метки в журнале о уровне сообщения:
13 from time import monotonic
14 from datetime import timedelta
15 from traceback import extract_tb, extract_stack
16 from typing import Optional, Any, Iterable
17 from sys import exc_info
21 def __init__(self, name: Optional[str] = None):
26 self.prefix = f'{name} :: '
28 self.tsAll = monotonic()
32 return monotonic() - self.ts
40 return self.prefix + '%s(%.4f)' % (timedelta(seconds=(ts - self.tsAll)), ts - self.ts)
42 def __call__(self, msg):
43 _buf = f'{self} | {msg}'
48 class AbstractLogBase(object):
49 def __init__(self, prefix: str = 'main'):
52 def _write_helper(self, mark: str, msg: Any) -> Iterable[str]:
53 for l in str(msg).splitlines():
54 yield f'{mark} {self.prefix} | {l}\n'
56 def _write(self, mark: str, msg: Any):
57 raise NotImplemented(f'Метод write не определён для класса "{type(self).__name__}"')
59 def __call__(self, msg):
75 def get_timing(name: Optional[str] = None):
78 def sub_log(self, name: str):
79 return self.__class__(f'{self.prefix}/{name}')
81 def excpt(self, msg, e_class=None, e_obj=None, e_tb=None, stack_skip=0):
83 e_class, e_obj, e_tb = exc_info()
85 tb_data_tb = list(extract_tb(e_tb))[::-1]
86 tb_data_stack = list(extract_stack())[::-1][(2 + stack_skip):]
88 self.alert('--- EXCEPTION ---')
89 self.alert(f' {e_class.__name__} ({e_obj})')
90 self.alert('--- TRACEBACK ---')
91 for _tb_file, _tb_line, _tb_func, _tb_text in tb_data_tb:
92 self.alert(f'File: {_tb_file}, line {_tb_line} in {_tb_func}')
93 self.alert(f' {_tb_text}')
95 self.err('>>> Exception Handler <<<')
96 for _tb_file, _tb_line, _tb_func, _tb_text in tb_data_stack:
97 self.alert(f'File: {_tb_file}, line {_tb_line} in {_tb_func}')
98 self.alert(f' {_tb_text}')
100 self.alert('--- END EXCEPTION ---')
103 class NullLog(AbstractLogBase):
104 def _write(self, mark: str, msg: Any):
107 def __init__(self, *a, **kwa):
108 super().__init__('n')
110 def sub_log(self, name: str):
114 def make(cls, *a, **kwa):
117 def flush(self, *a, **kwa):
121 def init_syslog(ident):