擅长:python、mysql、java
<p>是的,Flask是一个WSGI应用程序,因此将应用程序包装在记录请求的额外层中很简单:</p>
<pre><code>import pprint
class LoggingMiddleware(object):
def __init__(self, app):
self._app = app
def __call__(self, environ, resp):
errorlog = environ['wsgi.errors']
pprint.pprint(('REQUEST', environ), stream=errorlog)
def log_response(status, headers, *args):
pprint.pprint(('RESPONSE', status, headers), stream=errorlog)
return resp(status, headers, *args)
return self._app(environ, log_response)
</code></pre>
<p>这定义了一个中间件来包装Flask应用程序。其优点是它完全独立于烧瓶运行,让你对进和出的东西有未经过滤的洞察力。</p>
<p>如何应用中间件取决于所使用的确切WSGI服务器;请参阅WSGI服务器文档。</p>
<p>使用内置服务器(<code>app.run()</code>)运行Flask时,请执行以下操作:</p>
<pre><code>if __name__ == '__main__':
app.wsgi_app = LoggingMiddleware(app.wsgi_app)
app.run()
</code></pre>
<p>小包装舞将<code>app.wsgi_app</code>放在Flask WSGI应用程序周围。</p>
<p>输出到<code>wsgi.error</code>流;在该流中,结果再次取决于您的WSGI服务器;<code>mod_wsgi</code>将其放入站点的Apache错误日志中,捆绑的Flask服务器将其打印到<code>stderr</code>。</p>