【问题标题】:Flask WSGI logging logs at the wrong level on Apache2Apache2上错误级别的Flask WSGI日志记录
【发布时间】:2016-01-15 14:42:29
【问题描述】:

这是我的 apache error.log 示例:

[Fri Oct 16 18:28:24.816206 2015] [:info] [pid 13739:tid 139772762691456] mod_wsgi (pid=13739): Attach interpreter ''.
[Fri Oct 16 18:28:41.608894 2015] [:info] [pid 13739:tid 139772651718400] [remote 10.1.10.37:56161] mod_wsgi (pid=13739, process='dsapp', application=''): Loading WSGI script '/var/www/blackbird/blackbird.wsgi'.
[Fri Oct 16 18:28:42.176915 2015] [:info] [pid 13740:tid 139772651718400] [remote 10.1.10.154:49761] mod_wsgi (pid=13740, process='app2', application=''): Loading WSGI script '/var/www/whiteboard_v2/whiteboard.wsgi'.
[Fri Oct 16 18:28:45.863991 2015] [:error] [pid 13740:tid 139772467078912] INFO:app.api.routes:API/search: ImmutableMultiDict([('m', 'n'), ('q', '')])

注意最后一个日志条目 [:error]。

我想在 apache2 上以适当的级别登录。我希望最后一个条目说 [:info] 而不是 [:error]。

我的 Flask-WSGI 配置如下:

from flask import redirect, url_for, jsonify, request, send_file, current_app
from . import api
from flask.ext.cors import cross_origin
from ..models import Inventory
from app import db
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

@api.route('/api/search', methods=['GET'])
@cross_origin()
def index():
    d=request.args['q']
    m=request.args['m']
    logger.info('API/search: %s', request.args)

您可以清楚地看到我的意图是“信息”。如何将 Apache 配置为以适当的级别登录,以便我的烧瓶 logger.info 读取 [:info] 而不是 [:error]?

【问题讨论】:

    标签: python apache logging flask wsgi


    【解决方案1】:

    当 stdout/stderr 用于确保通常输出任何消息时,在 Apache 级别使用错误日志级别。如果这没有完成,并且您尝试使用 Python 级别的日志级别来尝试打开调试,那么如果它在调试级别传递给 Apache,您将永远不会在 Apache 日志中看到它。这是因为 Apache 日志级别会覆盖和抑制它。您不会希望将 Apache 日志级别设置为允许它,因为它会从 Apache 模块中产生大量您不想要的噪音。

    因此,请忽略 Apache 说这是一个错误级别的事实,并且很高兴它仍然被实际记录。面对两种日志级别设置,一种在 Apache 中,一种在 Python 中,这确实是最好的折衷方案。

    总的来说,我建议不要将 Python 日志记录配置为使用其他人建议的不同文件,除非您确保使用的日志记录处理程序可以正确处理来自多个进程的写入并正确处理日志轮换。 Apache 可以很好地处理这两个问题,但 Python 标准记录器不能。

    【讨论】:

      【解决方案2】:

      Python 日志级别与 Apache 日志级别无关。显然,Apache 将应用程序 mod_wsgi 的输出视为error 级别运行。让您的网络服务器记录网络服务器相关的事情。配置 Python 以将您的应用日志发送到其他文件。

      logging.basicConfig(filename='/path/to/app.log', level=logging.INFO)
      

      【讨论】:

        猜你喜欢
        • 2012-09-26
        • 2020-09-24
        • 1970-01-01
        • 1970-01-01
        • 2017-10-02
        • 1970-01-01
        • 2019-02-10
        • 2011-05-06
        • 1970-01-01
        相关资源
        最近更新 更多