Python Flask将访问日志写入STDERR

Len*_*ran 6 python flask python-3.x

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 -
Run Code Online (Sandbox Code Playgroud)

gon*_*opp 6

我假设你正在使用烧瓶开发服务器.

Flask的开发服务器基于werkzeug,而werkzeugWSGIRequestHandler又基于BaseHTTPServer标准库.

正如你会发现,WSGIRequestHandler覆盖测井方法,log_request,log_error并且log_message,使用它自己logging.Logger-所以你可以简单地重写它如你所愿,在IJade的答案的精神.

如果沿着这条路走下去,我认为改为添加自己的FileHandler会更清晰,并使用过滤器拆分stdout和stderr输出

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

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

如果您遇到这种问题,那么您是否应该运行真正的Web服务器


iJa*_*ade 4

这就是你要做的。导入日志记录并设置您需要记录的级别。

import logging
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
Run Code Online (Sandbox Code Playgroud)

  • 我不是OP,但我将问题解释为“如何在STDOUT上访问日志?” (4认同)