【问题标题】:Python Logging: Change "WARN" to "INFO"Python 日志记录:将“WARN”更改为“INFO”
【发布时间】:2018-05-04 21:23:35
【问题描述】:

如果我们的 Django Web 应用程序返回 404,我们会在日志中看到:

2017-11-21 12:48:26 django.request.get_response: WARNING Not Found: /foooooo

我想将 get_response() 创建的这一特定行从 WARN 更改为 INFO。

如何使用 Django 和 Python 进行配置?

另一种解决方案是忽略此行,但首选 WARN 到 INFO。

【问题讨论】:

  • 如果你“可以自己解决这个问题”,那么 IMO 我的回答包含了足够的细节,可以让有这种心态的人走上正轨。

标签: python django logging


【解决方案1】:

您不能轻易做到这一点,因为 Django 开发人员已确定此特定事件非常重要,可以归类为 WARNING

但是,您可以在写入日志时将其转换为 INFO,方法是添加 logging.Filter 子类的实例,将 LogRecord 中的级别从 WARNING 更改为INFO,或者完全过滤掉消息。

应该将过滤器添加到任何应以这种方式更改其输出的处理程序。这可以使用标准的 Django 日志记录配置机制来完成。

【讨论】:

  • 我想我可以自己解决这个问题。另一方面,我认为 10 位开发人员会以 10 种不同的方式来做这件事。哪种方式最pythonic?
【解决方案2】:

首先创建记录器过滤器

def change_404_level_to_INFO(record):
    if record.status_code == 404:
        record.levelname = 'INFO'
    return True

LOGGING 之后添加此过滤器并在记录器上设置过滤器

LOGGING = {
....
    'filters': {
        'change_404_to_INFO': {
            '()': 'django.utils.log.CallbackFilter',
            'callback': change_404_to_INFO`,
        },
    },
....
    'loggers': {
        'django.request': {
            'handlers': ['console',],
            'level': 'DEBUG',
            'propagate: False,
            'filters': ['change_404_to_INFO'],
        },
    }
....
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 2012-02-17
    • 1970-01-01
    • 2016-02-20
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多