Как добавить пользовательский loglevel к средству входа Python

Я хотел бы иметь ТРАССИРОВКУ 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.

101
задан DennisLi 12 August 2019 в 07:50
поделиться

2 ответа

Я думаю, что вам придется подкласс в классе класса и добавить метод под названием Trace , которые в основном вызывают Logger.Log с уровнем ниже Debug . Я не пробовал это, но это то, что указывает на документы .

8
ответ дан 24 November 2019 в 04:36
поделиться

Мне проще создать новый атрибут для объекта регистратора, который передает функцию 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')

должны работать должным образом.

9
ответ дан 24 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: