Более низкий уровень регистрации для одного регистратора - PullRequest
0 голосов
/ 08 апреля 2020

Я использую пакет, который слишком много регистрирует. В нем правильно настроены средства ведения журнала, поэтому я могу получить отдельные средства ведения журнала, используя getLogger.

Можно ли уменьшить уровень ведения журнала для всех сообщений, созданных определенным средством ведения журнала?

Я знаю, что есть setLevel функция, которая отключает все сообщения ниже определенного уровня, но я все еще хочу, чтобы сообщения регистрировались, только на более низком уровне, например, сообщения уровня INFO вместо этого должны регистрироваться в DEBUG.

1 Ответ

1 голос
/ 09 апреля 2020

Это зависит от того, что именно вы хотите, чтобы произошло. Вы можете использовать Фильтр или Адаптер для изменения уровня журнала.

Фильтр проще, но работает правильно только для понижения уровня журнала.

Преимущество решения адаптера заключается в настройке уровень в кратчайшие сроки. Недостатком адаптера является просто обертка вокруг регистратора, поэтому вам нужно передать его во все места, где будет использоваться регистратор. Если это сторонний модуль, адаптера решение будет невозможно.

# Using filters
import logging

def changeLevel(record):
    if record.levelno == logging.INFO:
        record.levelno = logging.DEBUG
        record.levelname = "DEBUG"
    return record

logger = logging.getLogger('name')
logger.addFilter(changeLevel)
# Using an adapter
import logging

class ChangeLevel(logging.LoggerAdapter):
    def log(self, level, msg, *args, **kwargs):
        if level == logging.INFO:
            level = logging.DEBUG
        super().log(level, msg, args, kwargs)

logger_ = logging.getLogger('name', {})
logger = ChangeLevel(logger_)
...