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

Rocky Linux 9中mod_wsgi输出日志至stderr无内容问题求助

解决Rocky Linux 9/RHEL9下mod_wsgi中Python logging无输出问题

直接解决方案(按优先级排序)


1. 绕过wsgi.errors,直接指定日志文件路径

RHEL9系列的mod_wsgi对wsgi.errors的处理逻辑有变更,直接使用FileHandler绑定具体日志文件是最稳妥的方式:

import logging

# 初始化logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.ERROR)  # 必须显式设置日志级别,默认是WARNING

# 绑定文件handler
log_path = "/var/log/my_web_app/error.log"
handler = logging.FileHandler(log_path)
handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
logger.addHandler(handler)

# 测试输出
logger.error("测试日志内容")

后续操作:

  • 创建日志目录并设置权限(确保mod_wsgi运行用户,通常是apache,有读写权限):
    mkdir -p /var/log/my_web_app
    chown apache:apache /var/log/my_web_app
    chmod 750 /var/log/my_web_app
    chmod 640 /var/log/my_web_app/error.log
    

2. 强制包装wsgi.errors为标准文本流

如果必须使用wsgi.errors,可以将其转为标准TextIOWrapper对象后再传入StreamHandler:

import logging
from io import TextIOWrapper

def setup_logging(environ):
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.ERROR)
    
    # 包装wsgi.errors为UTF-8编码的文本流
    errors_stream = TextIOWrapper(environ["wsgi.errors"], encoding="utf-8")
    handler = logging.StreamHandler(errors_stream)
    handler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
    logger.addHandler(handler)
    
    return logger

# 在WSGI应用入口调用
def application(environ, start_response):
    logger = setup_logging(environ)
    logger.error("通过包装后的wsgi.errors输出日志")
    
    start_response("200 OK", [("Content-Type", "text/plain")])
    return [b"Hello World"]

3. 禁用日志缓冲

RHEL9的mod_wsgi默认启用了输出缓冲,导致日志无法实时显示,可强制关闭:

# 在handler初始化后添加
handler.flush = True

# 或者在日志输出后手动刷新
logger.error("测试内容")
for handler in logger.handlers:
    handler.flush()

4. 检查mod_wsgi进程权限配置

确保httpd配置中WSGIDaemonProcess的运行用户拥有日志目录的读写权限:

# 在httpd.conf或虚拟主机配置中添加
WSGIDaemonProcess my_app user=apache group=apache threads=5
WSGIProcessGroup my_app

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 16:04:52