Я хотел бы иметь ТРАССИРОВКУ loglevel (5) для моего приложения, поскольку я не думаю это debug()
достаточно. Дополнительно log(5, msg)
не то, что я хочу. Как я могу добавить пользовательский loglevel к регистратору Python?
У меня есть a mylogger.py
со следующим содержанием:
import logging
@property
def log(obj):
myLogger = logging.getLogger(obj.__class__.__name__)
return myLogger
В моем коде я использую его следующим образом:
class ExampleClass(object):
from mylogger import log
def __init__(self):
'''The constructor with the logger'''
self.log.debug("Init runs")
Теперь я хотел бы звонить self.log.trace("foo bar")
Заранее спасибо за Вашу справку.
Редактирование (8-го декабря 2016): Я изменил принятый ответ на PFA, который является, по моему скромному мнению, отличным решением на основе очень хорошего предложения от Eric S.
Я думаю, что вам придется подкласс в классе
класса и добавить метод под названием Trace
, которые в основном вызывают Logger.Log
с уровнем ниже Debug
. Я не пробовал это, но это то, что указывает на документы .
Мне проще создать новый атрибут для объекта регистратора, который передает функцию log (). Я думаю, что модуль logger предоставляет addLevelName () и log () именно по этой причине. Таким образом, не нужны подклассы или новый метод.
import logging
@property
def log(obj):
logging.addLevelName(5, 'TRACE')
myLogger = logging.getLogger(obj.__class__.__name__)
setattr(myLogger, 'trace', lambda *args: myLogger.log(5, *args))
return myLogger
сейчас
mylogger.trace('This is a trace message')
должны работать должным образом.