python - 如何为 django 的(1.11)URL 调度程序添加日志跟踪(不适用于生产)
问题描述
我有一个旧的(Django 1.11)超过复杂的 Django 应用程序,具有重叠和有趣排序的 url 匹配规则,我想将它更新到更新的 Django 版本并简化/重构。
为了更好地理解 Id' 喜欢(手动)浏览应用程序并检索一些痕迹
是否可以在不必在每个视图中添加日志语句的情况下实现以下操作。
我想获得跟踪,告诉我 url 调度程序选择了哪个规则(如果可能,但不是真的必要),哪个视图调用了哪个参数。
例如,我可以肯定,某些规则可以被删除,因为它们不再使用。
示例:如果我有以下(不复杂的非重叠规则)url 调度程序规则。
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app1/', app1.views.top_view),
url(r'^app1/a', app1.views.a_view),
]
我访问了http://myserver/app1。我想有一个跟踪告诉我,http://myserver/app1
触发的规则^app1/
和(不太重要的)视图app1.views.top_view
将用于处理请求。
midllewares、decorators、monkeypatches,只要我不必更改所有单独的规则和所有视图来获取我的踪迹,什么都可以。即使是相当大的性能损失也不是问题,这是用于调试的
附言
我知道django-extensions
模块和管理命令show_urls
。
这已经很有帮助,但是对于在我的应用程序中显示的更复杂的 url,我希望进行日志记录。
解决方案
您可能必须先升级到 2.2,或者将此提交反向移植,否则您无法从路由器获取有关它用于解析请求 URI 的精确匹配的信息。
也就是说,它应该在请求阶段在中间件中完成。ResolverMatch 实例在 WSGIRequest 中作为 request.resolver_match 可用。使用上面的修复,为每个请求添加一个日志是微不足道的。
如果你不能向后移植或升级,有一种方法可以做到,这基本上涉及在所有已知 urlconfs 的启动时构建一个缓存,然后匹配每个,我已经在某个时候完成了它,但没有放置它周围了。您基本上必须完成 URLResolver.resolve() 的工作,然后在创建 ResolverMatch 实例时将路由添加到它。希望这可以帮助您入门。
推荐阅读
- google-apps-script - 基于两个相互依赖的单元格的 Google 表格公式 - 也许是 Appscript?
- reactjs - 对象作为 React 子级无效(找到:带键的对象} 如果您要渲染子级集合,请改用数组
- aem - cq:LiveSync 属性何时创建?
- python - 使用 Matplotlib savefig 动态命名
- c# - 如何使 2 个任务在 UWP 后台应用程序中同时运行?
- javascript - 使用 fs 写入文件后无法读取文件
- php - 教义失败,列不能为空错误;看不到值 _can_ 是如何为空的
- c - 当小数值为5时如何更改前一个小数值。在c语言中
- html - 将长表放入一个 PDF 页面
- c++ - 为什么重载决议选择指针类型为 0 而不是 1,当它在任何一种情况下都可以选择椭圆时?