如何配置我的Django日志,使其像内置的开发服务器日志一样工作



我正试图在settings.py中配置日志记录配置。由于选项太多,我无法复制内置的开发服务器日志(打印到控制台)。

我希望我的生产日志记录通常会在开发服务器日志中打印到控制台的相同信息(GET请求、调试信息等)。我要么需要知道我需要在下面更改哪些设置,要么需要知道内置开发服务器日志的设置位置,这样我就可以复制它。

LOGGING = {
    'version': 1,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
            },
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/home/django/django_log.log',
            'formatter': 'simple'
            },
        },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
            },
        }
    }
if DEBUG:
    # make all loggers use the console.
    for logger in LOGGING['loggers']:
        LOGGING['loggers'][logger]['handlers'] = ['console']

我也不想在其他地方添加任何代码,除了我的设置。如果可能的话。我不想进入我的views.py并指定要打印或记录的错误,我从来没有在开发服务器上这样做过,所以我希望我能弄清楚这一点。

在Django 1.8中,调试环境的默认日志配置是:

DEBUGTrue:时

  • django catch-all记录器将WARNING或更高级别的所有消息发送到控制台。Django此时不进行任何此类日志记录调用(所有日志记录都在DEBUG级别,或者由django.requestdjango.security记录器处理)
  • py.warnings记录器处理来自warnings.warn()的消息,并将消息发送到控制台

此日志记录配置可在django.utils.log.DEFAULT_LOGGING中找到。注意,catch-all记录器实际上也会获取信息消息,而不仅仅是警告和以上消息。

当覆盖默认的日志记录设置时,请注意,如果disable_existing_loggers设置为True,将关闭Django的所有默认日志记录程序。


开发服务器将每个传入请求直接记录到stderr,如下所示:

[18/Oct/2015 12:08:17] "GET /about/ HTTP/1.1" 200 9946

这是特定于开发服务器的,不会转移到生产环境中,除非您使用中间件进行复制。

最新更新