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

2022年10月27日16:03:18 發(fā)表評論 3,038 ℃

本地開發(fā)時我們一般會設(shè)置debug=True,生產(chǎn)環(huán)境就會關(guān)閉debug,但是最近發(fā)現(xiàn)有個Flask項目在生產(chǎn)環(huán)境,沒有輸出自定義的INFO日志。

一開始以為有什么bug,經(jīng)過反復(fù)測試,最終找到原因是因為debug關(guān)閉導(dǎo)致只輸出WARN級別以上的日志。

代碼里面日志級別設(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è)置日志級別為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.zhongjima.net"}

當(dāng)我把debug設(shè)置為True時,輸出結(jié)果如下:

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

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

當(dāng)我把debug設(shè)置為False時,輸出結(jié)果如下:

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

日志級別對照:

CRITICAL = 50

FATAL = CRITICAL

ERROR = 40

WARNING = 30

WARN = WARNING

INFO = 20

DEBUG = 10

NOTSET = 0

可以看見info和debug日志沒有輸出了,日志級別也發(fā)生了變化,但是我并沒有修改日志級別。

有人給出的解決方案是通過logging.basicConfig(level=logging.INFO)設(shè)置日志級別,設(shè)置以后發(fā)現(xiàn)重復(fù)輸出了:

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

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

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

至于是什么原因?qū)е轮澳莻€日志級別設(shè)置不生效,只能等空了慢慢研究了。

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評論

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