為什么80%的碼農都做不了架構師?>>> ??
? ? ? ?之前了解過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可以以哪些方式落下來,以及日志文件相關的一些參數。
python的logging模塊、 在設置完上面的log配置文件后,就可以在python代碼中加載這個配置文件了:
import logging
import logging.configlogging.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只是把硬編碼在代碼中的日志配置抽取出來而已。