繁体   English   中英

Flask WSGI日志记录在Apache2上级别错误

[英]Flask WSGI logging logs at the wrong level on Apache2

这是我的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在适当级别登录,以便我的flask logger.info读取[:info]而不是[:error]?

Python日志记录级别与Apache日志记录级别无关。 显然,Apache将来自应用程序mod_wsgi的输出视为error级别。 让您的Web服务器记录与Web服务器相关的内容。 配置Python以将您的应用日志发送到其他文件。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM