【问题标题】:Django log info as well as error logs on productionDjango 日志信息以及生产中的错误日志
【发布时间】:2018-10-30 21:01:31
【问题描述】:

我正在尝试记录 INFO 以及 ERROR 登录生产。 但我不确定如何提及同一个项目的两个日志级别。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'root': {
        'level': 'WARNING',
        'handlers': ['console', ],
    },
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s '
                      '%(process)d %(thread)d %(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        },
        'sns': {
            'level': 'ERROR',
            'class': 'project.abc.snshandler.SNSHandler',
            'formatter': 'verbose'

        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'ERROR',
            'handlers': ['console', ],
            'propagate': False,
        },
        'django.security.DisallowedHost': {
            'level': 'ERROR',
            'handlers': ['console', ],
            'propagate': False,
        },
        'project': {
            'level': 'ERROR',
            'handlers': ['console', 'sns'],
            'propagate': False,
        },

    },
}

在项目级别,我也想记录 INFO 日志。

【问题讨论】:

    标签: python django logging django-logging


    【解决方案1】:

    您在配置中指定的日志记录级别是最低级别将被记录。回顾一下,这里是按重要性顺序(从最低到最高)的预定义级别:

    • DEBUG
    • INFO
    • WARNING
    • ERROR
    • CRITICAL

    因此,如果您将INFO 放入配置中,您将看到所有标记为INFOWARNINGERRORCRITICAL 的日志。

    如果你真的想只看到INFOERROR,你可以尝试编写一些自定义代码,但我不鼓励这样做,因为它闻起来是糟糕的设计。

    参考文献

    编辑

    您的配置如下所示:

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': True,
        'root': {
            'level': 'WARNING',
            'handlers': ['console', ],
        },
        'formatters': {
            'verbose': {
                'format': '%(levelname)s %(asctime)s %(module)s '
                          '%(process)d %(thread)d %(message)s'
            },
        },
        'handlers': {
            'console': {
                'level': 'INFO',
                'class': 'logging.StreamHandler',
                'formatter': 'verbose'
            },
            'sns': {
                'level': 'ERROR',
                'class': 'project.abc.snshandler.SNSHandler',
                'formatter': 'verbose'
    
            }
        },
        'loggers': {
            'django.db.backends': {
                'level': 'INFO',
                'handlers': ['console', ],
                'propagate': False,
            },
            'django.security.DisallowedHost': {
                'level': 'INFO',
                'handlers': ['console', ],
                'propagate': False,
            },
            'project': {
                'level': 'INFO',
                'handlers': ['console', 'sns'],
                'propagate': False,
            },
    
        },
    }
    

    【讨论】:

    • 这里我不希望 INFO 日志得到 SNS 的通知。 SNS 应该只通知错误日志。
    • 我明白了。所以在console 中设置INFO,在sns 中设置ERROR。我更新了我建议的配置代码。
    • 澄清我的编辑:project 的所有级别为INFO 及以上的日志都由snsconsole 处理,但sns 丢弃所有不是@987654345 的日志@ 或以上。
    猜你喜欢
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2016-05-21
    • 1970-01-01
    • 2018-02-12
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多