Django使用Python内建的logging模块打印日志,配置由四个部分组成
- 记录器:Logger
- 处理程序:Handler
- 过滤器:Filter
- 格式化:formatter
记录器-Logger
Logger为日志系统的入口,每个logger命名都是bucket,可以向bucket写入需要处理的消息
Python定义以及几种日志级别:
- DEBUG:用于调试目的的日志
- INFO:普通的系统消息
- WARNING:表示出现一个较小的问题
- ERROR:表示出现一个较大的问题
- CRITICAL:表示出现一个致命的问题
处理逻辑:
当一条消息传递给Logger的时候,消息的日志级别将与logger的日志级别进行比较
如果消息的日志级别大于等于logger的日志消息,该消息绩效往下处理,如果小于,该消息被忽略
Logger一旦决定消息需要处理,它将传递该消息给一个Handler
logger日志级别
级别
|
值
|
描述
|
CRITICAL
|
50
|
关键错误/消息
|
ERROR
|
40
|
错误
|
WARNING
|
30
|
警告消息
|
INFO
|
20
|
通知消息
|
DEBUG
|
10
|
调试
|
NOTSET
|
0
|
无级别
|
logger配置
logger对应的值是字典,其中每一个健都是logger的名字,每一个值又是个字典
- level(可选) - logger的级别
- propagate(可选) - logger的传播设置
- filters(可选) - logger的fillter的标识符列表
- handlers(可选) - logger的handler的标识符列表
配置示例
#settings LOGGING = { #记录器 'loggers': { 'reboot': { 'handlers': ['reboot'], 'level': 'INFO', } } } ''' level配置的日志级别为INFO 那么在程序中 如果使用logger.DEBUG,DEBUG级别小于INFO,则不会处理 如果是大于等于INFO,则会交给handlers处理日志 '''
处理程序-Handler
handler决定如何处理logger中的每条消息,它表示一个特定的日志行为,例如将消息写到屏幕、文件中或者网络socket
与logger一样,handler也有一个日志解蔽,如果消息的日志级别小于handler的级别,handler将忽略这条消息
logger可以有多个handler,而每个handler可以有不同的日志级别
#配置示例 settings LOGGING = { # 记录器 'loggers': { 'reboot': { 'handlers': ['reboot'], # 处理器对应下方handlers中的reboot 'level': 'INFO', } }, # 处理器 'handlers': { 'reboot': { 'level': 'INFO', 'class': 'logging.StreamHandler', # 以流的形式写入 'formatter': 'reboot', # 指定交给哪个格式化处理 } } } ''' loggers中的reboot,定义级别为INFO,如果满足INFO级别,交给handlers处理,loggers中的handler配置的是reboot 在下发的handlers配置reboot的具体处理方式 '''
class
logging.StreamHandler 类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息 logging.FileHandler 将日志消息写入文件filename。 logging.handlers.DatagramHandler(host,port) 发送日志消息给位于制定host和port上的UDP服务器。使用UDP协议,将日志信息发送到网络 logging.handlers.HTTPHandler(host, url) 使用HTTP的GET或POST方法将日志消息上传到一台HTTP 服务器。 logging.handlers.RotatingFileHandler(filename) 将日志消息写入文件filename。如果文件的大小超出maxBytes制定的值,那么它将被备份为filenamel。 logging.handlers.SocketHandler 使用TCP协议,将日志信息发送到网络。 logging.handlers.SysLogHandler 日志输出到syslog logging.handlers.NTEventLogHandler 远程输出日志到Windows NT/2000/XP的事件日志 logging.handlers.SMTPHandler 远程输出日志到邮件地址 logging.handlers.MemoryHandler 日志输出到内存中的指定buffer
过滤器-Filters
filter用于对从logger传递给handler的日志记录进行额外的控制
默认情况满足日志级别的任何消息都被处理,可以使用filter,对日志处理添加额外的条件,例如只允许处理特定源的ERROR消息
filters还可以用于修改将要处理的日志记录的优先级,例如日志满足特定条件,可以通过filter将日志记录从ERROR降到WARNING
filters可以在logger上或者handler上,多个filter可以串联起来实现多层的filter行为
格式化-Formatters
日志记录需要转换成文本或者其他格式 ,formatter表示文本的格式
formatter通常由包含日志记录属性的Python格式字符串组成
消息日志格式