如何为 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将用于处理请求。

中间件,装饰器,猴子补丁,只要我不必更改所有单独的规则和所有视图来获得我的痕迹,就可以了。 即使是相当大的性能损失也不是问题,这是调试的问题

附言

我知道django-extensions模块和管理命令show_urls.

这已经很有帮助了,但是对于我的应用程序中显示的更复杂的URL,我希望有日志记录。

您可能必须先升级到 2.2,或者向后移植此提交,否则您无法从路由器获取有关它用于解析请求 URI 的完全匹配的信息。

也就是说,它应该在请求阶段在中间件中完成。ResolverMatch 实例在 WSGIRequest 中以request.resolver_match形式提供。使用上述修复,向每个请求添加日志是很简单的。

如果你不能向后移植或升级,有一种方法可以做到这一点,这基本上涉及在所有已知的urlconfs启动时构建一个缓存,然后匹配每个,我已经在某个时候做到了,但不再有它了。你基本上必须做URLResolver.resolve((的工作,然后在它创建ResolverMatch实例时向其添加路由。希望这可以帮助您入门。

最新更新