django -- 日志 logging


[HTML_REMOVED]


说明

今天在看《python linux系统管理与自动化运维》这本书的时候,里面讲到了 python 上的 logging 日志模块,就找找资料添加到 Django 上了

最好的资料还是在于官网:https://docs.djangoproject.com/en/2.1/topics/logging/


简单介绍

Django 有自己自带的日志管理,不过基本上还是基于 logging 模块建立起来的,只是对用户来说方便了很多

在日志上,有四个功能块 - loggers - handlers - filters - formatters

这四个功能块的流向顺序如下:

                       formatter
logger ----> handler ---------------->  files, emails, console
                         filter

每个功能块的作用及功能具体可以看官网文档的介绍

此外,日志中还有五个日志等级

  • logger.debug()
  • logger.info()
  • logger.warning()
  • logger.error()
  • logger.critical()

然后,我们只要在 settings.py 文件上添加这四个功能块的配置项就可以了

很重要的一点是,只要配置好了,Django就会自动解析这些配置,并执行。所以就省掉了我们很多功夫去填写

原理就不多说,直接配置好代码

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{levelname} {message}',
            'style': '{',
        },
        'simple': {
            'format': '{levelname} {message}',
            'style': '{',
        },
    },
    'filters': {
    },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'debug.log'),
            'formatter': 'verbose',
        },
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose',
        },
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
        }
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django_file': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': False,
        },
        'myproject.custom': {
            'handlers': ['console', 'mail_admins'],
            'level': 'INFO',
        }
    },
}

因为平时不需要特别多的日志分析,所以直接定义 等级+信息 就足够了

更多的格式化参数可以参考使用:https://docs.python.org/3/library/logging.html#logrecord-attributes

然后 DEBUG 级别及以上的都会输出到文件 debug.log 中

其他的是官网上抄的,像 ERROR 级别的可以发邮件给管理员,这个还没有验证,也就不敢妄下结论了