Python 仅将Flask日志记录中间件应用于一个视图
我现在有以下中间件:Python 仅将Flask日志记录中间件应用于一个视图,python,flask,wsgi,werkzeug,Python,Flask,Wsgi,Werkzeug,我现在有以下中间件: class LoggingMiddleware(object): def __init__(self, app): self._app = app def __call__(self, environ, resp): keys = ['HTTP_ACCEPT', 'HTTP_ACCEPT_ENCODING', 'HTTP_X_FORWARDED_FOR', 'HTTP_REFERER', 'HTTP
class LoggingMiddleware(object):
def __init__(self, app):
self._app = app
def __call__(self, environ, resp):
keys = ['HTTP_ACCEPT', 'HTTP_ACCEPT_ENCODING',
'HTTP_X_FORWARDED_FOR', 'HTTP_REFERER',
'HTTP_USER_AGENT', 'PATH_INFO',
'QUERY_STRING', 'REMOTE_ADDR']
dumpable = { k:environ.get(k, None) for k in keys }
print json.dumps(dumpable) # Not sure how to get this to work with papertrail
return self._app(environ, resp)
我通过以下方式安装:
app.wsgi_app = LoggingMiddleware(app.wsgi_app)
这会记录我的应用程序处理的每个请求。我想将此范围仅限于一个视图函数
@app.route('/foo/')
def foo
如何操作?如果您不需要未修改的环境密钥,只需使用该特定路由的装饰器,并从以下位置获取
环境
:
然后只需将您关心的一条路径包装到日志装饰器中:
@app.route('/foo/')
@log_request
def foo():
return 'hello from /foo/'
或者,如果必须使用中间件(或者如果要配置在运行时而不是构建时记录哪些路由),则只需查看PATH\u INFO
并仅在路径匹配时记录:
if environ.get('PATH_INFO') in ('/foo/', '/bar'):
keys = # ... snip ...
return self._app(environ, resp)
if environ.get('PATH_INFO') in ('/foo/', '/bar'):
keys = # ... snip ...
return self._app(environ, resp)