py.lib.aw_log

Yohn Y. 2026-06-23 Parent:1e93862d5063 Child:e673daec06dc

8:7caffeee7dca Go to Latest

py.lib.aw_log/src/aw_log/__init__.py

.. 1.202606.2 . Проблема в разборе расширенного сообщения при некоторых параметрах

History
     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