詳解python日志輸出使用配置文件格式

python腳本日志輸出使用配置文件的形式,不需要在每個腳本裡面配置日志。

需求簡述:

如我要寫2個腳本(a.py和b.py),a.py日志輸出到/var/log/a.log,b.py日志輸出到/var/log/b.log,並且日志按日期切割。如果每個腳本都去配置一遍日志的話,浪費時間也不利於後期維護。

現在我要使用配置文件的格式去統一管理python腳本的代碼日志輸出,後續所有python腳本日志都在這個配置文件裡面配置,腳本讀取。方便後續維護和增加腳本的可讀性。

需求實現:

我配置文件路徑及內容:

vim /data/yw/conf/logconf.conf 
 
[loggers]
keys=root,alog,blog
[handlers]
keys=handdef,handalog,handblog
 
[formatters]
keys=formatdef
###############################################
[logger_root]
level=DEBUG
handlers=handdef
 
[logger_alog]
level=DEBUG
# 如果同時使用handalog,handdef ,那麼在執行a.py腳本的時候日志即輸出到控制臺,也輸出到日志文件
handlers=handalog,handdef
qualname=alog
propagate=0
 
[logger_blog]
#b.py 的日志我不讓他輸出到控制臺,所以不用handdef 這個hands去處理日志
level=DEBUG
handlers=handblog
qualname=blog
propagate=0
 
###############################################
[handler_handdef]
# 輸出到控制臺
class=StreamHandler
level=INFO
formatter=formatdef
args=(sys.stderr,)
 
 
[handler_handalog]
# a.py 日志我按時間切割
# handlers.TimedRotatingFileHandler:使用時間格式切割日志,midnight為凌晨切割  
# 如果配置按時#間切割的話可以這樣:class=FileHandler,然後寫個腳本定時去切割。
class=handlers.TimedRotatingFileHandler
level=DEBUG
formatter=formatdef
args=('/var/log/a.log', 'midnight')
#args=('/var/log/a.log', 'a') 不使用時間切割可以這樣配置args
#另一種寫法:面三個參數含義: D 按天切割 1 每天隻切割一個文件 5 保留5個日志文件
#args=('/data/ywlog/cron/cron_dbbackup.log', 'D', 1, 5)
 
[handler_handblog]
# b.py 日志我不進行切割
class=FileHandler
level=DEBUG
formatter=formatdef
args=('/var/log/b.log', 'a') 
###############################################
[formatter_formatdef]
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'
datefmt='%a, %d %b %Y %H:%M:%S'

腳本引用配置文件:

vi a.py

#!/usr/bin/python
# coding=utf-8
import logging, logging.config
reload(sys)
sys.setdefaultencoding('utf8')
 
logging.config.fileConfig("/data/yw/conf/logconf.conf")
logger = logging.getLogger('alog') #alog 為logconf.conf loggers 配置的關鍵字
# 日志輸出
logger.info("aaaa 正確日志")
logger.error("aaaa 錯誤日志")

vi b.py

#!/usr/bin/python
# coding=utf-8
import logging, logging.config
reload(sys)
sys.setdefaultencoding('utf8')
 
logging.config.fileConfig("/data/yw/conf/logconf.conf")
logger = logging.getLogger('blog') #blog 為logconf.conf loggers 配置的關鍵字
# 日志輸出
logger.info("bbbb 正確日志")
logger.error("bbbb 錯誤日志")

測試結果:

 執行a.py腳本的時候發現日志輸出到控制臺也輸入到日志文件裡面,但是執行b.py 時,日志隻輸入到日志文件瞭。和配置文件註釋的一樣。

後期如果我還要添加c.py, d.py 腳本的話我隻需要按照上面的格式去配置即可。不需要在腳本裡面去配置。

到此這篇關於詳解python日志輸出使用配置文件格式的文章就介紹到這瞭,更多相關python日志輸出 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: