访问Python烧瓶请求上下文以写入Apache错误日志

时间:2017-05-28 08:13:35

标签: python mod-wsgi

WSGI将其请求上下文传递给Flask。我该如何访问它?

例如,要从不使用WSGI的Flask应用程序写入Web服务器错误日志,我写信给stderr:

sys.stderr.write(str(msg) + "\n")

对于这种类型的日志记录输出,WSGI for Python要求我使用WSGI请求上下文environ['wsgi.errors'] See the WSGI debugging docs.

我该怎么做?

2 个答案:

答案 0 :(得分:1)

如果使用mod_wsgi,您可以使用print()。它将捕获并将其发送到Apache错误日志。如果您使用足够新的mod_wsgi版本并且它在请求的上下文中完成,那么它甚至会与Apache级别的请求相关联,这意味着您可以通过设置Apache日志格式在Apache日志中标记它,如果需要,可以使用Apache请求ID,因此可以将其与任何针对相同请求的Apache日志记录相关联。

通常,所有WSGI服务器都将捕获print()输出并将其发送到日志。唯一的例外往往是针对CGI / FASTCGI / SCGI的WSGI。因此,并非特别需要使用wsgi.errors,并且代码甚至很少使用它。

答案 1 :(得分:0)

通过request.environ

访问WSGI请求上下文

记录WSGI和非WSGI配置的Web服务器错误日志:

def log(msg):
    out_stream = sys.stderr
    # See http://modwsgi.readthedocs.io/en/develop/user-guides/debugging-techniques.html
    if 'wsgi.errors' in request.environ: out_stream = request.environ['wsgi.errors']
    out_stream.write(str(msg) + "\n")
相关问题