Python Flask将访问日志写入STDERR

时间:2015-03-11 10:56:28

标签: python python-3.x flask

Flask正在将访问日志写入STDERR流而不是STDOUT。如何更改此配置,以便访问日志转到STDOUT,应用程序错误转到STDERR?

open-cricket [master] python3 flaskr.py > stdout.log 2> stderr.log &
[1] 11929

open-cricket [master] tail -f stderr.log
 * Running on http://127.0.0.1:9001/
127.0.0.1 - - [11/Mar/2015 16:23:25] "GET /?search=Sachin+Tendulkar+stats HTTP/1.1" 200 -
127.0.0.1 - - [11/Mar/2015 16:23:25] "GET /favicon.ico HTTP/1.1" 404 -

2 个答案:

答案 0 :(得分:6)

我假设您正在使用烧瓶开发服务器。

Flask的开发服务器基于werkzeug,其WSGIRequestHandler又基于标准库中的BaseHTTPServer

当您注意到WSGIRequestHandler overrides the logging methodslog_requestlog_errorlog_message时,要使用它自己的logging.Logger - 所以你可以根据自己的意愿简单地覆盖它,这是IJade的回答。

如果你沿着这条路走下去,我认为改为使用自己的FileHandler更加清晰,split the stdout and stderr output using a filter

但请注意,所有这些都是特定于实现的 - 实际上没有合适的界面来执行您想要的操作

虽然它与您的实际问题相关,但我觉得我真的必须要问 - 您为什么担心开发服务器上每个日志的内容

如果您遇到此类问题,您是否应该运行真正的网络服务器

答案 1 :(得分:4)

这是你要做的。 Import logging并设置记录所需的级别。

import logging
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)