本地开发时我们一般会设置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时,输出结果如下:
当我把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)日志级别以后就正常了。
至于是什么原因导致之前那个日志级别设置不生效,只能等空了慢慢研究了。