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)