【问题标题】:Logging warnings in Django: filter not returning anything在 Django 中记录警告:过滤器不返回任何内容
【发布时间】:2017-06-25 22:52:55
【问题描述】:

我正在尝试设置 Django 日志记录以记录弃用警告。我通常不会有这样的格式化程序或将其输出到控制台,这只是为了测试并显示它不起作用。

这是我的代码:

def is_deprecated(record):
    if record.exc_info:
        exc_type, exc_value = record.exc_info[:2]
        print(exc_value)
        if isinstance(exc_value, DeprecationWarning) or isinstance(exc_value, PendingDeprecationWarning):
            return True
    return False

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'stuff': {
            'format': 'This works!'
        }
    },
    'filters': {
      'is_deprecated': {
          '()': 'django.utils.log.CallbackFilter',
          'callback': is_deprecated,
      },
    },
    'handlers': {
        'console': {
            'filters': ['is_deprecated'],
            'class': 'logging.StreamHandler',
            'formatter': 'stuff',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}

它应该输出“这有效!”当它遇到弃用警告时,它不会。我正在运行带有这些警报的python

python -Wd

所以我可以看到常规的 Django 警报,但我无法让记录器检测到它们。

【问题讨论】:

    标签: python django logging


    【解决方案1】:

    显然,您使用-Wd 参数显示警告但不被视为异常(Django 日志仅处理异常)您可以在某些初始部分使用warnings.simplefilter('error') 更改此行为(如 settings.py 、init.py、manage.py 等)或使用python -W error 命令

    参考:https://docs.python.org/2/library/warnings.html#the-warnings-filter

    【讨论】:

    • 在此之上,simplefilter 将引发等效的异常。如果你不想要这个,你可以按照这个解决方案来处理带有 Django 日志记录的警告stackoverflow.com/questions/40752766/…
    猜你喜欢
    • 1970-01-01
    • 2010-11-20
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多