Как я могу создать подкласс logging.Logger, не нарушая %(имя файла) в синтаксисе интерполяции logging.FormatterPython

Программы на Python
Anonymous
Как я могу создать подкласс logging.Logger, не нарушая %(имя файла) в синтаксисе интерполяции logging.Formatter

Сообщение Anonymous »

Я пытаюсь написать собственный подкласс logging.Logger, который в основном работает, но я сталкиваюсь с проблемами при попытке использовать logging.Formatter, который включает интерполированное значение %(filename)< /code> в пользовательском формате печатает имя файла, в котором находится мой пользовательский подкласс, а не имя файла кода, вызвавшего функцию регистрации.
Я нашел несколько руководств для создания подкласса Logger, но ни один из них не учитывает влияние, которое это оказывает на интерполяцию имени файла. Есть ли простое решение этой проблемы без необходимости переопределять большие разделы logging.Logger?
Пример кода, определяющего мой собственный регистратор:

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

#-------------------------------------
# custom_logger.py
#-------------------------------------
import logging
import io
class CustomLogger(logging.Logger):

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setLevel(logging.DEBUG)

# create the record format
formatter = logging.Formatter(fmt = "%(filename)s - %(message)s")

# create the handler
self.stream = io.StringIO()
handler = logging.StreamHandler(self.stream)
handler.setFormatter(formatter)
self.addHandler(handler)

def debug(self, msg, *args, **kwargs):
super().debug(msg, *args, **kwargs)

# do some other stuff
...

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

#-------------------------------------
# test.py
#-------------------------------------
from custom_logger import CustomLogger
import logging

logging.setLoggerClass(CustomLogger)
myLog = logging.getLogger("myLog")
myLog.debug("hello world")
print(myLog.stream.getvalue())
Ожидаемый результат:

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

>>> test.py - hello world
Фактический результат:

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

>>> custom_logger.py - hello world


Подробнее здесь: https://stackoverflow.com/questions/789 ... ing-format

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