Flask debug为False时日志级别不生效解决办法

2022年10月27日16:03:18 发表评论 1,125 ℃

本地开发时我们一般会设置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": "阿汤博客:https://www.amd5.cn"}

当我把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: