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