Edit on GitHub

src.core.log_cfg

Кастомизация логирования

 1"""Кастомизация логирования"""
 2
 3import copy
 4import logging
 5
 6
 7class ColoredConsoleHandler(logging.StreamHandler):
 8    """Обработчик логов, который выводит сообщения в консоль с цветовой кодировкой.
 9
10    Этот класс наследует от `logging.StreamHandler` и переопределяет метод `emit`,
11    чтобы добавить цветовую кодировку в зависимости от уровня логирования.
12    """
13
14    def emit(self, record):
15        """Выводит лог-сообщение с цветовой кодировкой.
16
17        Args:
18            record (logging.LogRecord): Запись лога, содержащая информацию о сообщении.
19        """
20        myrecord = copy.copy(record)
21        levelno = myrecord.levelno
22        if levelno >= 50:  # CRITICAL / FATAL
23            color = "\x1b[31;1m"  # bold_red
24        elif levelno >= 40:  # ERROR
25            color = "\x1b[31m"  # red
26        elif levelno >= 30:  # WARNING
27            color = "\x1b[33m"  # yellow
28        elif levelno >= 20:  # INFO
29            color = "\x1b[32m"  # green
30        elif levelno >= 10:  # DEBUG
31            color = "\x1b[35m"  # pink
32        else:  # NOTSET and anything else
33            color = "\x1b[0m"  # normal
34        myrecord.levelname = color + str(myrecord.levelname) + "\x1b[0m"  # normal
35        myrecord.name = "\x1b[34m" + str(myrecord.name) + "\x1b[0m"
36        myrecord.filename = "\x1b[36m" + str(myrecord.filename) + "\x1b[0m"
37        myrecord.funcName = "\x1b[36m" + str(myrecord.funcName) + "\x1b[0m"
38        try:
39            if "METRIC" in myrecord.msg:
40                myrecord.msg = myrecord.msg.replace("METRIC", "\x1b[31mMETRIC\x1b[0m")
41        except Exception:
42            pass
43        logging.StreamHandler.emit(self, myrecord)
44
45
46class ExtraFormatter(logging.Formatter):
47    """Форматировщик логов, который добавляет дополнительные атрибуты в формат сообщений.
48
49    Этот класс наследует от `logging.Formatter` и переопределяет метод `format`,
50    чтобы включить дополнительные атрибуты, которые могут быть добавлены к записям лога.
51    """
52
53    def format(self, record: logging.LogRecord) -> str:
54        """Форматирует запись лога, добавляя дополнительные атрибуты.
55
56        Args:
57            record (logging.LogRecord): Запись лога, содержащая информацию о сообщении.
58
59        Returns:
60            str: Отформатированная строка сообщения лога.
61        """
62        self._style._fmt = self._fmt
63        default_attrs = logging.LogRecord(*[None] * 7).__dict__.keys()
64        extras = (
65            set(record.__dict__.keys())
66            - default_attrs
67            - {"message", "color_message", "asctime"}
68        )
69        if extras:
70            format_str = "\n" + "\n".join(f"{val}: %({val})s" for val in sorted(extras))
71            self._style._fmt += format_str
72        return super().format(record)
class ColoredConsoleHandler(logging.StreamHandler):
 8class ColoredConsoleHandler(logging.StreamHandler):
 9    """Обработчик логов, который выводит сообщения в консоль с цветовой кодировкой.
10
11    Этот класс наследует от `logging.StreamHandler` и переопределяет метод `emit`,
12    чтобы добавить цветовую кодировку в зависимости от уровня логирования.
13    """
14
15    def emit(self, record):
16        """Выводит лог-сообщение с цветовой кодировкой.
17
18        Args:
19            record (logging.LogRecord): Запись лога, содержащая информацию о сообщении.
20        """
21        myrecord = copy.copy(record)
22        levelno = myrecord.levelno
23        if levelno >= 50:  # CRITICAL / FATAL
24            color = "\x1b[31;1m"  # bold_red
25        elif levelno >= 40:  # ERROR
26            color = "\x1b[31m"  # red
27        elif levelno >= 30:  # WARNING
28            color = "\x1b[33m"  # yellow
29        elif levelno >= 20:  # INFO
30            color = "\x1b[32m"  # green
31        elif levelno >= 10:  # DEBUG
32            color = "\x1b[35m"  # pink
33        else:  # NOTSET and anything else
34            color = "\x1b[0m"  # normal
35        myrecord.levelname = color + str(myrecord.levelname) + "\x1b[0m"  # normal
36        myrecord.name = "\x1b[34m" + str(myrecord.name) + "\x1b[0m"
37        myrecord.filename = "\x1b[36m" + str(myrecord.filename) + "\x1b[0m"
38        myrecord.funcName = "\x1b[36m" + str(myrecord.funcName) + "\x1b[0m"
39        try:
40            if "METRIC" in myrecord.msg:
41                myrecord.msg = myrecord.msg.replace("METRIC", "\x1b[31mMETRIC\x1b[0m")
42        except Exception:
43            pass
44        logging.StreamHandler.emit(self, myrecord)

Обработчик логов, который выводит сообщения в консоль с цветовой кодировкой.

Этот класс наследует от logging.StreamHandler и переопределяет метод emit, чтобы добавить цветовую кодировку в зависимости от уровня логирования.

def emit(self, record):
15    def emit(self, record):
16        """Выводит лог-сообщение с цветовой кодировкой.
17
18        Args:
19            record (logging.LogRecord): Запись лога, содержащая информацию о сообщении.
20        """
21        myrecord = copy.copy(record)
22        levelno = myrecord.levelno
23        if levelno >= 50:  # CRITICAL / FATAL
24            color = "\x1b[31;1m"  # bold_red
25        elif levelno >= 40:  # ERROR
26            color = "\x1b[31m"  # red
27        elif levelno >= 30:  # WARNING
28            color = "\x1b[33m"  # yellow
29        elif levelno >= 20:  # INFO
30            color = "\x1b[32m"  # green
31        elif levelno >= 10:  # DEBUG
32            color = "\x1b[35m"  # pink
33        else:  # NOTSET and anything else
34            color = "\x1b[0m"  # normal
35        myrecord.levelname = color + str(myrecord.levelname) + "\x1b[0m"  # normal
36        myrecord.name = "\x1b[34m" + str(myrecord.name) + "\x1b[0m"
37        myrecord.filename = "\x1b[36m" + str(myrecord.filename) + "\x1b[0m"
38        myrecord.funcName = "\x1b[36m" + str(myrecord.funcName) + "\x1b[0m"
39        try:
40            if "METRIC" in myrecord.msg:
41                myrecord.msg = myrecord.msg.replace("METRIC", "\x1b[31mMETRIC\x1b[0m")
42        except Exception:
43            pass
44        logging.StreamHandler.emit(self, myrecord)

Выводит лог-сообщение с цветовой кодировкой.

Arguments:
  • record (logging.LogRecord): Запись лога, содержащая информацию о сообщении.
class ExtraFormatter(logging.Formatter):
47class ExtraFormatter(logging.Formatter):
48    """Форматировщик логов, который добавляет дополнительные атрибуты в формат сообщений.
49
50    Этот класс наследует от `logging.Formatter` и переопределяет метод `format`,
51    чтобы включить дополнительные атрибуты, которые могут быть добавлены к записям лога.
52    """
53
54    def format(self, record: logging.LogRecord) -> str:
55        """Форматирует запись лога, добавляя дополнительные атрибуты.
56
57        Args:
58            record (logging.LogRecord): Запись лога, содержащая информацию о сообщении.
59
60        Returns:
61            str: Отформатированная строка сообщения лога.
62        """
63        self._style._fmt = self._fmt
64        default_attrs = logging.LogRecord(*[None] * 7).__dict__.keys()
65        extras = (
66            set(record.__dict__.keys())
67            - default_attrs
68            - {"message", "color_message", "asctime"}
69        )
70        if extras:
71            format_str = "\n" + "\n".join(f"{val}: %({val})s" for val in sorted(extras))
72            self._style._fmt += format_str
73        return super().format(record)

Форматировщик логов, который добавляет дополнительные атрибуты в формат сообщений.

Этот класс наследует от logging.Formatter и переопределяет метод format, чтобы включить дополнительные атрибуты, которые могут быть добавлены к записям лога.

def format(self, record: logging.LogRecord) -> str:
54    def format(self, record: logging.LogRecord) -> str:
55        """Форматирует запись лога, добавляя дополнительные атрибуты.
56
57        Args:
58            record (logging.LogRecord): Запись лога, содержащая информацию о сообщении.
59
60        Returns:
61            str: Отформатированная строка сообщения лога.
62        """
63        self._style._fmt = self._fmt
64        default_attrs = logging.LogRecord(*[None] * 7).__dict__.keys()
65        extras = (
66            set(record.__dict__.keys())
67            - default_attrs
68            - {"message", "color_message", "asctime"}
69        )
70        if extras:
71            format_str = "\n" + "\n".join(f"{val}: %({val})s" for val in sorted(extras))
72            self._style._fmt += format_str
73        return super().format(record)

Форматирует запись лога, добавляя дополнительные атрибуты.

Arguments:
  • record (logging.LogRecord): Запись лога, содержащая информацию о сообщении.
Returns:

str: Отформатированная строка сообщения лога.