如果 DEBUG 为 True,也启用 Django 日志记录

Posted

技术标签:

【中文标题】如果 DEBUG 为 True,也启用 Django 日志记录【英文标题】:Enable Django logging also if DEBUG is True 【发布时间】:2012-10-02 05:07:52 【问题描述】:

通过阅读官方 django 文档,我对它了解不多。 https://docs.djangoproject.com/en/dev/topics/logging/#configuring-logging

如果 settings.py 中的 DEBUG 设置为 True,我也想启用日志记录。 我希望将错误记录在一个文件中。

怎么做?

这些是我目前拥有的用于日志记录的默认 django 设置:

LOGGING = 
    'version': 1,
    'disable_existing_loggers': False,
    'filters': 
        'require_debug_false': 
            '()': 'django.utils.log.RequireDebugFalse'
        
    ,
    'handlers': 
        'mail_admins': 
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        
    ,
    'loggers': 
        'django.request': 
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        ,
    

PS: 我在我的开发环境中使用 Apache + mod_wsgi,因为我使用的是我在 LAN 上远程访问的开发机器,这意味着我没有使用 django 开发服务器并且我看不到控制台日志消息。

【问题讨论】:

【参考方案1】:

默认情况下,在任何一种 DEBUG 模式下都不会禁用 Django 日志记录,除非您已将其设置为。

将下面添加到LOGGINGhandlers 部分

'file':
        
            'level':
                'INFO',
            'class':
                'logging.FileHandler',
            'formatter':
                'verbose',
            'filename':
                'myapp.log'

        

它将记录到您项目根目录中的myapp.log 文件。您可以指定完整的路径。

并将格式化程序字段添加到 Logging dict

'formatters': 
        'verbose': 
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        ,
        'simple': 
            'format':
                '%(levelname)s %(message)s'
        ,
    ,

【讨论】:

【参考方案2】:

这是一个受Simple Log to File example for django 1.3+启发的工作设置示例

LOGGING = 
    'version': 1,
    'disable_existing_loggers': False,
    'filters': 
        'require_debug_false': 
            '()': 'django.utils.log.RequireDebugFalse'
        
    ,
    'handlers': 
        'mail_admins': 
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        ,
        'logfile': 
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': SITE_ROOT + "/debug.log",
            'maxBytes': 50000,
            'backupCount': 2,
            'formatter': 'custom',
        ,
    ,
    'loggers': 
        #'django': 
        #    'handlers':['logfile'],
        #    'level':'DEBUG',
        #    'propagate': True,
        #,
        #'django.request': 
        #    'handlers': ['mail_admins', 'logfile'],
        #    'level': 'DEBUG',
        #    'propagate': True,
        #,
        'nodeshot.core.mailing': 
            'handlers': ['logfile'],
            'level': 'DEBUG',
        ,
    ,
    'formatters': 
        'verbose': 
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        ,
        'simple': 
            'format': '%(levelname)s %(message)s'
        ,
        'custom': 
            'format': '%(levelname)s %(asctime)s\n%(message)s'
        ,
    ,

【讨论】:

以上是关于如果 DEBUG 为 True,也启用 Django 日志记录的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 - env local debug true 没有显示错误

Django提供静态文件服务

python web开发-flask调试模式

djang增删改查

WordPress调试

Djang DJANGO_SETTINGS_MODULE