You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask默认Logger日志缺失时间戳问题咨询

Flask默认日志无时间戳问题解决

问题描述

在Flask应用中使用默认Logger,查看Flask源码确认默认格式化器包含时间戳,但通过gunicorn启动应用时,自定义日志仅显示级别、来源和消息,缺失时间戳;而gunicorn自身的日志却正常显示时间戳。

控制器代码:

from flask import request
from flask_restful import Resource
from flask import current_app as app

class HealthCheckController(Resource):
    def __init__(self):
        pass

    def get(self):
        app.logger.info("added logs here")

日志输出示例:

[2023-01-02 16:27:46 +0530] [77757] [INFO] Starting gunicorn 20.1.0
[2023-01-02 16:27:46 +0530] [77757] [INFO] Listening at: http://0.0.0.0:8080 (77757)
[2023-01-02 16:27:46 +0530] [77757] [INFO] Using worker: sync
[2023-01-02 16:27:46 +0530] [77758] [INFO] Booting worker with pid: 77758
[2023-01-02 16:27:46 +0530] [77759] [INFO] Booting worker with pid: 77759
[2023-01-02 16:27:46 +0530] [77760] [INFO] Booting worker with pid: 77760
[2023-01-02 16:27:46 +0530] [77761] [INFO] Booting worker with pid: 77761
INFO:src:added logs here

问题原因

使用gunicorn启动Flask应用时,gunicorn会初始化Python的logging模块,替换掉Flask默认的日志配置,导致Flask自带的带时间戳格式化器未被应用到日志处理器上。

解决方案

方案1:手动配置Flask日志格式化器

在Flask应用初始化阶段,重新配置日志处理器,确保使用带时间戳的格式化规则:

import logging
from flask import Flask

app = Flask(__name__)

# 定义带时间戳的日志格式
log_format = '%(asctime)s %(levelname)s:%(name)s:%(message)s'
formatter = logging.Formatter(log_format)

# 为Flask默认日志处理器设置格式化器
for handler in app.logger.handlers:
    handler.setFormatter(formatter)

# 若默认处理器被gunicorn移除,可添加新的处理器
handler = logging.StreamHandler()
handler.setFormatter(formatter)
app.logger.addHandler(handler)
app.logger.setLevel(logging.INFO)

方案2:配置gunicorn统一日志格式

启动gunicorn时通过命令行参数指定日志格式,让所有日志(包括Flask自定义日志)统一使用带时间戳的格式:

gunicorn --log-format='%(asctime)s %(levelname)s:%(name)s:%(message)s' 你的应用模块名:app

也可以在gunicorn配置文件(如gunicorn.conf.py)中设置:

log_format = '%(asctime)s %(levelname)s:%(name)s:%(message)s'

方案3:禁用gunicorn日志配置,让Flask接管

启动gunicorn时添加--disable-logging参数,阻止gunicorn修改日志配置,保留Flask默认的带时间戳日志格式:

gunicorn --disable-logging 你的应用模块名:app

注意:此方式会关闭gunicorn自身的日志输出,需确保Flask的日志配置能覆盖所有必要的日志场景。

内容的提问来源于stack exchange,提问作者Dhanendra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:25:25