Подкласс журналирования не получен правильноPython

Программы на Python
Ответить
Anonymous
 Подкласс журналирования не получен правильно

Сообщение Anonymous »

Я использую библиотеку ведения журнала Python, и мне нужно создать собственный регистратор, который регистрирует два атрибута моего процесса: имя_экземпляра и идентификатор_экземпляра. Я пришел к этому решению, которое работает успешно, хотя я не уверен, что оно что-то упускает или делает что-то ненужное:

Код: Выделить всё

import logging
from logging import Formatter

class CustomLogger(logging.Logger):
def __init__(self, name, extra={}):
super().__init__(name)
self.extra = extra

def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False, **kwargs):
if extra is None:
extra = self.extra
else:
extra.update(self.extra)
super()._log(level, msg, args, exc_info, extra, stack_info, **kwargs)

logger = CustomLogger("test-logger", {"instance_name": "name", "instance_id": 12})
console_handler = logging.StreamHandler()
formatter = Formatter(
"%(asctime)s - %(levelname)s - instance name: %(instance_name)s - instance id: %(instance_id)i - %(message)s"
)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
если я использую этот регистратор для регистрации сообщения, я получаю то, что ожидаю

Код: Выделить всё

logger.info("Hello world")
# 2024-11-14 16:22:51,320 - INFO - name: name - id: 12 - Hello world
Но если я захочу получить тот же самый регистратор позже в коде, он не содержит никакого обработчика и, следовательно, ничего не будет регистрировать

Код: Выделить всё

logging.setLoggerClass(CustomLogger)
retrieved_logger = logging.getLogger("test-logger")

# doesn't print anything
retrieved_logger.info("Hello world")

logger.handlers, retrieved_logger.handlers
# ([], [])
Я также знаю, что полученный регистратор является одноэлементным и должен быть тем же экземпляром, что и регистратор.

Код: Выделить всё

logger is retrieved_logger
# False
Мой вопрос: в чем здесь проблема? Почему я не могу получить тот же регистратор, который настроил?


Подробнее здесь: https://stackoverflow.com/questions/791 ... -correctly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»