之前了解过python的logging模块,最近整理笔记时发现还有一篇logging的配置遗漏在角落里没整理出来,在此把logging的配置整理出来,在使用python自带的logging模块落日志时是可以在代码内进行配置的,但是你见过哪些程序员会这样操作,一般都是把程序和配置文件进行分离的,这样配置文件有变动时,并不需要生成新的代码版本。python也有自带的logging.config模块,让程序通过解析log配置文件来获取日志的配置。
下面我们看看一个使用logging.config进行配置的例子:
#设置loggers,必须有root,其次设置你的自定义loggers,自定义了三个logger
[loggers]
keys=root,log1,log2,log3
#设置你自定义的handlers,自定义了三个handler
[handlers]
keys=hand1,hand2,hand3
#设置你自定义的日志格式,自定义了三个formatter
[formatters]
keys=form1,form2,form3
#配置每个logger的信息,logger的配置以[logger_xxx]进行配置,首先配置root
[logger_root]
level=NOTSET
handlers=hand1
#配置logger中log1的信息
[logger_log1]
level=INFO
handlers=hand1
propagate=0
qualname=log1
#配置logger中log2的信息
[logger_log2]
level=DEBUG
handlers=hand2
propagate=0
qualname=log2
#配置logger中log3的信息
[logger_log3]
level=ERROR
handlers=hand3
propagate=0
qualname=log3
#设置handler的信息,以[handler_xxx]开始进行设置,先设置hand1的信息
[handler_hand1]
class=FileHandler
level=INFO
formatter=form1
args=('../logs/log1.log','a')
#设置hand2的信息
[handler_hand2]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=form1
args=('../logs/log2.log','a','2000',9)
#设置hand3的信息
[handler_hand3]
class=handlers.TimedRotatingFileHandler
level=ERROR
formatter=form1
args=('../logs/log3.log','D',0,9)
#设置日志的格式,以[formatter_xxx]开始进行设置,先设置form1的格式
[formatter_form1]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(process)d %(levelname)s %(message)s
datefmt=%a,%d %b %Y %H:%M:%S
#设置form2的格式
[formatter_form2]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(process)d %(levelname)s %(message)s
datefmt=%a,%d %b %Y %H:%M:%S
#设置form3的格式
[formatter_form3]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(process)d %(levelname)s %(message)s
datefmt=%a,%d %b %Y %H:%M:%S
以上配置文件中的参数大多数都可以在logging模块的doc文档中看到详细的解释,比如level、format、datefmt等等,但是handler的class设置的详细却在另外一个logging.handlers模块中,logging.handlers模块详细的解释了log可以以哪些方式落下来,以及日志文件相关的一些参数。
在设置完上面的log配置文件后,就可以在python代码中加载这个配置文件了:
import logging
import logging.config
logging.config.fileConfig("/opt/conf/logging.config")
logger1=logging.getLogger("log1")
logger2=logging.getLogger("log2")
logger3=logging.getLogger("log3")
#text
logger1.info("add email_contents")
这样就可以把你设置的信息写入相关日志文件中了。本篇没有详细的解释日志文件的设置规范,因为这些信息都是和前面logging模块相关的,logging.config只是把硬编码在代码中的日志配置抽取出来而已。