Django 中使用 logging进行日志输出
logging 模块简介
logging 是 python 标准库中的模块,用于记录 log。
主要包括以下四个组件:
- Loggers 向应用程序提供log接口
- Handlers 将log记录发送到指定的目的地(控制台输出,或写入文件或发向网络等等)
- Filters 提供一个分级策略控制 log 输出等级
- Formatters 指定输出的最终格式
在D jango 中使用
Django 中使用 logging 模块记录log,如果要使用它,方法很简单,就是在 settings 中通过变量 LOGGING,LOGGING 是一个字典,典型的配置如下:
LOGGING = {
'version': 1,#指明dictConnfig的版本,目前就只有一个版本,哈哈
'disable_existing_loggers': True,#禁用所有的已经存在的日志配置
'formatters': {#格式器
'verbose': {#详细
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {#简单
'format': '%(levelname)s %(message)s'
},
},
'filters': {#过滤器
'special': {#使用project.logging.SpecialFilter,别名special,可以接受其他的参数
'()': 'project.logging.SpecialFilter',
'foo': 'bar',#参数,名为foo,值为bar
}
},
'handlers': {#处理器,在这里定义了三个处理器
'null': {#Null处理器,所有高于(包括)debug的消息会被传到/dev/null
'level':'DEBUG',
'class':'django.utils.log.NullHandler',
},
'console':{#流处理器,所有的高于(包括)debug的消息会被传到stderr,使用的是simple格式器
'level':'DEBUG',
'class':'logging.StreamHandler',
'formatter': 'simple'
},
'mail_admins': {#AdminEmail处理器,所有高于(包括)而error的消息会被发送给站点管理员,使用的是special格式器
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['special']
}
},
'loggers': {#定义了三个记录器
'django': {#使用null处理器,所有高于(包括)info的消息会被发往null处理器,向父层次传递信息
'handlers':['null'],
'propagate': True,
'level':'INFO',
},
'django.request': {#所有高于(包括)error的消息会被发往mail_admins处理器,消息不向父层次发送
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'myproject.custom': {#所有高于(包括)info的消息同时会被发往console和mail_admins处理器,使用special过滤器
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
'filters': ['special']
}
}
}
一个记录器是日志系统的一个实体,每一个记录器是一个已经命名好的可以将消息为进程写入的“桶”。
每一个记录器都会有一个日志等级,每个等级描述了记录器即将处理的信息的严重性,python定义了以下五个等级:
- debug:出于调试目的的低层次系统信息
- info:普通的系统信息列表内容
- warning:描述已经发生的小问题
- error:描述已经发生的主要问题
- critical:描述已经发生的严重问题
然后在需要输出日志的地方,输出如下代码:
import logging
# logging.getLogger()的调用获得一个记录器的实体,记录器实体通过名字来辨别。一般参数填写记录器的python模块的名字,#这使得基于每个模块的记录成为可能或者你可以是用点号相连的名字,这意味着记录器的层次,点号之前的是点号之后的父模块。
logger = logging.getLogger(“prj.app.file”)
logger.info('123')
logger.error('error')
logger.warning('warning')