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: Отформатированная строка сообщения лога.