如何设置';一网打尽';在PythonPyramid中查看以记录静态文件的传入请求?

如何设置';一网打尽';在PythonPyramid中查看以记录静态文件的传入请求?,python,pyramid,waitress,Python,Pyramid,Waitress,出于调试目的,我试图查看从html文件中请求了哪些静态文件(css、js、jpg等)。我在这里阅读了文档:我已经像这样设置了我的配置: config.add_route('catchall_static', 'static/*subpath') 我的看法是: @view_config(route_name='catchall_static') path_info = request._headers.environ['PATH_INFO'] log.debug('path info = {0}

出于调试目的,我试图查看从html文件中请求了哪些静态文件(css、js、jpg等)。我在这里阅读了文档:我已经像这样设置了我的配置:

config.add_route('catchall_static', 'static/*subpath')
我的看法是:

@view_config(route_name='catchall_static')
path_info = request._headers.environ['PATH_INFO']
log.debug('path info = {0} {1}'.format(path_info, query_string))
return request.response
有了这段代码,有几件事正在进行

1) 虽然静态文件是通过视图来的,但它们实际上并没有加载到浏览器中 2) 当静态文件通过视图时,我的代码至少在日志记录中起作用,但有50%的时间我会出现以下错误:

回溯: 路径信息=请求。_headers.environ['path\u info'] AttributeError:“非类型”对象没有属性“环境”

错误似乎集中在html文件(如css文件)中的eariler上,而html文件底部的.js文件有时可以工作


所以基本上我不知道我是接近还是完全走错了解决问题的方向。有人知道正确的方法吗?

您确定,此路由可以成功地处理任何请求吗? 实现您的目标的可能性有:WSGI中间件、金字塔型中间层或自定义事件订阅者

定制订户可能是最简单的订户。此订阅服务器在创建响应之前被调用,因此它无法知道响应代码、内容等。 要实现这一点,您可以添加请求完成回调或使用其他方法之一

from pyramid.events import NewRequest
from pyramid.events import subscriber

@subscriber(NewRequest)
def static_logger(event):
    logger = logging.getLogger('static')
    request = event.request

    if request.path_info.startswith('/static'):
        logger.info('static request: {} {}'.format(request.path_info,
                                                   request.query_string))
并在development.ini中激活记录器:

[loggers]
keys = root, static


[logger_static]
level = DEBUG
handlers = console
qualname = static

谢谢我在你发帖子之前找到了答案。你的回答是正确的。仅供参考,我使用了@subscriber(NewResponse),这也给了我状态码。:)