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

CentOS服务器Gunicorn重启后无法输出Werkzeug/Flask日志至文件

Flask+Gunicorn在CentOS下日志无法输出到指定文件的问题解决

问题描述

本地终端可正常查看Werkzeug/Flask默认日志,但在CentOS服务器上重启Gunicorn服务后,日志无法输出到指定文件,仅能在虚拟环境的Shell中查看日志。

期望的日志格式示例

[2023-10-21 18:01:38,550] INFO in _internal:  * Restarting with stat
[2023-10-21 18:01:39,049] WARNING in _internal:  * Debugger is active!
[2023-10-21 18:01:39,052] INFO in _internal:  * Debugger PIN: 691-655-964
[2023-10-21 18:58:06,111] INFO in _internal: [31m[1mWARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.[0m
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://10.200.16.168:5000
[2023-10-21 18:58:06,111] INFO in _internal: [33mPress CTRL+C to quit[0m
[2023-10-21 18:58:06,111] INFO in _internal:  * Restarting with stat
[2023-10-21 18:58:06,691] WARNING in _internal:  * Debugger is active!
[2023-10-21 18:58:06,707] INFO in _internal:  * Debugger PIN: 691-655-964
[2023-10-21 19:01:45,844] INFO in _internal: 127.0.0.1 - - [21/Oct/2023 19:01:45] "GET / HTTP/1.1" 200 -
[2023-10-21 19:01:45,917] INFO in _internal: 127.0.0.1 - - [21/Oct/2023 19:01:45] "[36mGET /static/media/Ericsson_logo.png HTTP/1.1[0m" 304 -
[2023-10-21 19:01:46,068] INFO in _internal: 127.0.0.1 - - [21/Oct/2023 19:01:46] "[36mGET /static/jqueryAdd.js HTTP/1.1[0m" 304 -

当前日志配置代码

import os
import logging
import logging.handlers
from flask import Flask, redirect, url_for, render_template, request, session, flash
from datetime import timedelta


from logging.config import dictConfig

dictConfig({
    'version': 1,
    'handlers': {
        'file.handler': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'server_werkzeug.log',
            'maxBytes': 10000000,
            'backupCount': 5,
            'level': 'DEBUG',
        },
    },
    'loggers': {
        'werkzeug': {
            'level': 'INFO',
            'handlers': ['file.handler'],
        },
    },
})

#logging.basicConfig(filename='flask_record.log', level=logging.INFO, format=f'%(asctime)s %(levelname)s %(name)s %(threadName)s : %(message)s')

app = Flask(__name__)

解决方案

1. 使用绝对路径指定日志文件

相对路径会受Gunicorn启动时的工作目录影响,导致日志文件写入位置不符合预期。修改配置中的日志路径为绝对路径:

'filename': '/var/log/flask/server_werkzeug.log'

同时确保该路径对应的目录存在,且Gunicorn运行用户拥有读写权限。

2. 检查并配置Gunicorn日志参数

Gunicorn默认会捕获应用的标准输出/错误,可能干扰Flask的日志配置。启动Gunicorn时可指定日志文件,或关闭日志捕获:

  • 启动示例(指定Gunicorn自身日志):
    gunicorn --workers=2 --bind=0.0.0.0:5000 --access-logfile /var/log/gunicorn/access.log --error-logfile /var/log/gunicorn/error.log app:app
    
  • 若要完全使用Flask的日志配置,可添加--disable-logging参数关闭Gunicorn日志干预。

3. 确保日志目录权限正确

创建日志目录并设置所属用户/组:

sudo mkdir -p /var/log/flask /var/log/gunicorn
sudo chown your_gunicorn_user:your_gunicorn_group /var/log/flask /var/log/gunicorn

替换your_gunicorn_user和your_gunicorn_group为实际运行Gunicorn的用户和组(比如nginx或你创建的应用用户)。

4. 验证日志配置有效性

在Flask代码中添加测试日志,排查配置是否生效:

# 在app = Flask(__name__)后添加
logging.info("测试日志输出:检查是否写入指定文件")

重启Gunicorn后查看日志文件是否有这条记录,判断是配置问题还是路径/权限问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:35:59