Flask debug為False時日志級別不生效解決辦法

2022年10月27日16:03:18 發表評論 923 ℃

本地開發時我們一般會設置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時,輸出結果如下:

Flask debug為False時日志級別不生效解決辦法

Flask debug為False時日志級別不生效解決辦法

當我把debug設置為False時,輸出結果如下:

Flask 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)設置日志級別,設置以后發現重復輸出了:

Flask debug為False時日志級別不生效解決辦法

最終找到了解決方法就是通過app.logger.setLevel(logging.INFO)日志級別以后就正常了。

Flask debug為False時日志級別不生效解決辦法

至于是什么原因導致之前那個日志級別設置不生效,只能等空了慢慢研究了。

【騰訊云】云服務器、云數據庫、COS、CDN、短信等云產品特惠熱賣中

發表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: