前言
一个 Web 项目,无论是在开发调试的时候,还是上线为用户提供服务以后,都需要保留下一些运行当中必要的信息用于日后的维护和故障的定位。Django 中使用 Python 内建的 logging
模块做日志的收集。
Django 中日志系统配置
logging 模块配置
logging 模块为用户提供了用于配置它的 api(接口函数)- logging.config.dictConfig(config)
。这里需要传递一个config
参数(日志配置参数字典)。config
通过 DictConfigurator
类进行解析,其构造方法使用了 config
,同时还有一个 configure()
方法。dictConfig()
方法内部调用 dictConfigClass
初始化一个 DictConfigurator
实例并调用 configure()
方法。
def dictConfig(config):
dictConfigClass(config).configure()
如果在 DJANGO 使用的话第一步需要在项目 setting.py 文件中定义这个上面说到的 config
(日志配置字典),包括记录器(loggers)、处理器(handlers)、日志格式(formatters)、过滤器(filters)。
File:project/setting.py
LOGGING = {
'version': 1, # 标示配置模板版本,int 类型,目前只接收 `1`这个值。
'disable_existing_loggers': False, # 这个没太看明白什么意思,了解的朋友麻烦说明下
'formatters': {
'standard': {
'format': '%(levelname)s %(asctime)s %(message)s',
},
},
'filters': {
# 这里是定义过滤器,需要注意的是,由于 'filters' 是 logging.config.dictConfig 方法要求在配置字典中必须给订的 key ,所以即使不使用过滤器也需要明确给出一个空的结构。
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'formatter':'standard',
},
'tofile': {
'level': 'ERROR',
'class': 'logging.FileHandler',
'formatter':'standard',
'filename': 'project/app/log/view.log',
},
},
'loggers': {
'project.app': {
'handlers': ['tofile'],
'level': 'DEBUG',
'propagate': True,
},
}
}
下一步需要在需要记录日志的地方创建 logger 实例。
File:project/app/views.py
import logging
logger = logging.getLogger(__name__) # 这里使用 __name__ 动态搜索定义的 logger 配置,这里有一个层次关系的知识点。
def log_test(request):
logger.error("level error test")
logger.info("level info test")
运行上面代码 "level error test" 会被写入 project/app/log/view.log
,因为 logger 对象会根据层次搜索使用 setting.py 设置中的 project.app 记录器配置。由于 project.app 记录器配置绑定了 tofile 处理器,所以只会写入 error 以上的日志记录。
总结
到此是一个 Django 中使用日志 logging 模块的大致方法,细节还需要阅读官方文档,可能有不对的地方,日后慢慢更正。