Как я могу создать подкласс 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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как я могу создать подкласс logging.Logger, не нарушая %(имя файла) в синтаксисе интерполяции logging.Formatter
    Anonymous » » в форуме Python
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • OSLog (Logger) выдает ошибки с помощью простой интерполяции строк
    Anonymous » » в форуме IOS
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Oslog (logger), предоставляя ошибки с помощью простой строковой интерполяции
    Anonymous » » в форуме IOS
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Oslog (logger), предоставляя ошибки с помощью простой строковой интерполяции
    Anonymous » » в форуме IOS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Разница между logger.info и logger.debug
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

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