如何配置我的Django日志以像内置的开发服务器日志一样运行?

时间:2015-02-03 16:28:14

标签: django django-settings

我正在尝试在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']

如果可能的话,我也不想在除了我的settings.py之外的任何地方添加任何代码。我不想进入我的views.py并指定要打印或记录的错误,我从来没有用开发服务器这样做,所以我希望我能弄明白。< / p>

1 个答案:

答案 0 :(得分:3)

在Django 1.8中,调试环境的default logging configuration为:

  

DEBUGTrue时:

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

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

覆盖默认日志记录设置时,请注意disable_existing_loggers,如果设置为Truewill shut up all of Django's default loggers

开发服务器logs every incoming request directly to stderr是这样的:

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

这是特定于开发服务器的,除非您复制它with middleware,否则不会转移到生产环境。