在Django中记录警告:过滤器不返回任何内容

时间:2017-06-25 22:52:56

标签: python django logging

我正在尝试设置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警报,但我无法让记录器检测它们。

1 个答案:

答案 0 :(得分:0)

显然,你使用它显示警告的-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