py.lib.aw_log
py.lib.aw_log/src/aw_log/__init__.py
.. 1.202606.2 . Проблема в разборе расширенного сообщения при некоторых параметрах
1.1 --- a/src/aw_log/__init__.py Thu Oct 31 00:24:34 2024 +0300 1.2 +++ b/src/aw_log/__init__.py Tue Jun 23 15:32:27 2026 +0300 1.3 @@ -17,7 +17,10 @@ 1.4 from sys import exc_info 1.5 1.6 1.7 -class Timing(object): 1.8 +class Timing: 1.9 + """\ 1.10 + Организация работы с таймерами 1.11 + """ 1.12 def __init__(self, name: Optional[str] = None): 1.13 if name is None: 1.14 self.prefix = '' 1.15 @@ -25,19 +28,19 @@ 1.16 else: 1.17 self.prefix = f'{name} :: ' 1.18 1.19 - self.tsAll = monotonic() 1.20 - self.ts = self.tsAll 1.21 + self.ts_all = monotonic() 1.22 + self.ts = self.ts_all 1.23 1.24 def get_time(self): 1.25 return monotonic() - self.ts 1.26 1.27 def reset(self): 1.28 self.ts = monotonic() 1.29 - self.tsAll = self.ts 1.30 + self.ts_all = self.ts 1.31 1.32 def __str__(self): 1.33 ts = monotonic() 1.34 - return self.prefix + '%s(%.4f)' % (timedelta(seconds=(ts - self.tsAll)), ts - self.ts) 1.35 + return self.prefix + '%s(%.4f)' % (timedelta(seconds=(ts - self.ts_all)), ts - self.ts) 1.36 1.37 def __call__(self, msg): 1.38 _buf = f'{self} | {msg}' 1.39 @@ -45,7 +48,7 @@ 1.40 return _buf 1.41 1.42 1.43 -class AbstractLogBase(object): 1.44 +class AbstractLogBase: 1.45 def __init__(self, prefix: str = 'main'): 1.46 self.prefix = prefix 1.47 1.48 @@ -75,6 +78,31 @@ 1.49 def get_timing(name: Optional[str] = None): 1.50 return Timing(name) 1.51 1.52 + @staticmethod 1.53 + def format_msg(msg: str, **kwa) -> str: 1.54 + """\ 1.55 + Создаём сообщение, более дружелюбное к средствам разбора логов. 1.56 + Ориентир на ``victoria_logs`` и её ``unpack_logfmt`` 1.57 + 1.58 + :param msg: Основное сообщение 1.59 + :param kwa: Набор ключ-значение, для добавления в сообщения в качестве 1.60 + разбираемых системой элементов, пригодных для фильтрации 1.61 + :returns: Строку, которую необходимо отправить в лог методом с нужным уровнем важности. 1.62 + """ 1.63 + data = '' 1.64 + for k, v in kwa.items(): 1.65 + _v = str(v) 1.66 + if v.find(' ') != -1: 1.67 + v = f'"{v}"' 1.68 + 1.69 + data += f' {k}={v}' 1.70 + 1.71 + if not data: 1.72 + return msg 1.73 + 1.74 + else: 1.75 + return f'{msg} |{data}' 1.76 + 1.77 def sub_log(self, name: str): 1.78 return self.__class__(f'{self.prefix}/{name}') 1.79