当Django中有回溯错误时,我在stdout中获取日志两次

时间:2019-05-10 10:14:40

标签: python django python-logging

我的LOGGER的settings.py如下,

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
    'json': {
        '()': 'sample_app.json_log_formatter.JSONFormatter',
    },
  },
'handlers': {
    'console': {
        'class': 'logging.StreamHandler',
        'stream': sys.stdout,
        #'level': '',
        'formatter': 'json'
    },
},
'loggers': {
    '': {
        'handlers': ['console'],
        'level': 'INFO',
        #'propogate': True,
    },
},
}

现在,当有任何未处理的异常,例如var = abc且未定义abc时,我会得到两次日志,

一个与我的处理程序一起使用,因此回溯错误为json格式,第二个同样为不包含json格式的错误,它来自django.request。

注意:我没有在代码中添加任何额外的记录器行。我只希望所有未处理的异常也都为json格式,但只能一次。这样当我发送给ELK时很干净

1 个答案:

答案 0 :(得分:0)

我进行了如下设置更改

'loggers': {
    '': {
        'handlers': ['console'],
        'level': 'DEBUG',
        'propogate': True,
    },
    'django': {
        'handlers': ['console'],
        'propagate': False,
        'level': 'INFO'
    },

因此,在这里,我们将django的默认请求发送到INFO级别,并传播为false,因此它不会出现一次。这将覆盖根级别的日志记录配置,在上面的示例中,其他应用程序(例如我的django应用程序)的默认调试级别为django日志的INFO级别。