【发布时间】:2021-03-19 04:05:22
【问题描述】:
我最近在我的 Flask 应用程序中设置了日志记录,以便它可以记录到文件和标准输出。我正在插入像
这样的日志记录语句current_app.logger.info('Logging message')
进入路由,以便我在路由上运行 pytest 测试时可以看到日志消息。这工作了一段时间(记录到文件和控制台),但在某些时候它停止记录到控制台,同时继续记录到日志文件。
我不确定是什么原因导致停止记录到标准输出。唯一想到的是,我曾尝试在某个时刻向测试模块添加一条日志记录语句。这导致了一个错误,这可能与我的应用程序工厂 pytest 夹具定义的应用程序中未配置记录器有关。但是,我已经从测试模块中删除了这个日志记录语句,我仍然没有得到我之前得到的控制台日志。
任何人都可以看到停止登录控制台的任何原因吗?
我的日志配置:
__init__.py:
def create_app(test_config=None):
app = Flask('project_name', instance_relative_config=True)
...
if not app.debug:
if not os.path.exists('logs'):
os.mkdir('logs')
file_handler = RotatingFileHandler('logs/trivia.log', maxBytes=10240, backupCount=10)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'))
file_handler.setLevel(logging.INFO)
app.logger.addHandler(file_handler)
stream_handler = StreamHandler(sys.stdout)
stream_handler.setFormatter(logging.Formatter(
'%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'
))
stream_handler.setLevel(logging.INFO)
app.logger.addHandler(stream_handler)
app.logger.setLevel(logging.INFO)
routes.py
@bp.route('/add', methods=['POST'])
def add_question():
current_app.logger.info("Received request to /add")
...
【问题讨论】:
-
您确定使用正确的级别进行日志记录吗?在您显示的代码中,您使用的是
current_app.logger.debug,但级别设置为INFO。调试在信息下方,因此不会显示 -
好地方。这是少数日志语句之一,其中一些是
INFO。当我将其更改为 info 时,该声明尤其不起作用。编辑帖子以避免混淆;谢谢。