本地開發(fā)時(shí)我們一般會(huì)設(shè)置debug=True,生產(chǎn)環(huán)境就會(huì)關(guān)閉debug,但是最近發(fā)現(xiàn)有個(gè)Flask項(xiàng)目在生產(chǎn)環(huán)境,沒有輸出自定義的INFO日志。
一開始以為有什么bug,經(jīng)過反復(fù)測試,最終找到原因是因?yàn)閐ebug關(guān)閉導(dǎo)致只輸出WARN級(jí)別以上的日志。
代碼里面日志級(jí)別設(shè)置方式如下:
from logging.handlers import RotatingFileHandler import logging # 創(chuàng)建文件處理器 fileHandler = RotatingFileHandler( filename='amd5.cn', maxBytes=10000000, backupCount=5 ) # 給處理器設(shè)置輸出格式 formatter = logging.Formatter( '%(asctime)s %(levelname)s %(process)d [%(threadName)s] - %(filename)s:%(module)s : %(message)s') fileHandler.setFormatter(formatter) # 設(shè)置日志級(jí)別為INFO fileHandler.setLevel(logging.INFO)
測試代碼如下:
@bp.route('/test') def AtangBlogTest(): log.debug("我是debug日志") log.info('我是info日志') log.warning('我是warning日志') log.error('我是error日志') print(f"日志級(jí)別: {log.level}") return {"code": 200, "msg": "阿湯博客:http://www.zhongjima.net"}
當(dāng)我把debug設(shè)置為True時(shí),輸出結(jié)果如下:
當(dāng)我把debug設(shè)置為False時(shí),輸出結(jié)果如下:
日志級(jí)別對(duì)照:
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
可以看見info和debug日志沒有輸出了,日志級(jí)別也發(fā)生了變化,但是我并沒有修改日志級(jí)別。
有人給出的解決方案是通過logging.basicConfig(level=logging.INFO)設(shè)置日志級(jí)別,設(shè)置以后發(fā)現(xiàn)重復(fù)輸出了:
最終找到了解決方法就是通過app.logger.setLevel(logging.INFO)日志級(jí)別以后就正常了。
至于是什么原因?qū)е轮澳莻€(gè)日志級(jí)別設(shè)置不生效,只能等空了慢慢研究了。