Django - 记录每个视图的操作
Posted
技术标签:
【中文标题】Django - 记录每个视图的操作【英文标题】:Django - logging each view's action 【发布时间】:2013-09-14 13:31:28 【问题描述】:我正在考虑为我的 django Web 应用程序创建一个日志系统。 Web 应用程序的使用非常全面(涵盖业务流程的所有方面),因此我想跟踪发生的每个事件。具体来说,我想记录运行的每个视图,而不仅仅是“主要”视图,并且可能记录视图执行时发生的事情。
当我处于日志记录系统的“构思”阶段时,我很快就遇到了一些让我不确定如何进行的问题。以下是我的主要问题:
我正在考虑将所有事件记录在主 Web 应用程序保存其数据的同一个 mysql 数据库中。我担心的是将 MySQL 数据库膨胀成一个庞大的数据库。此外,如果数据库崩溃或以某种方式被破坏(是的,我有备份),我也会丢失我的日志,这会破坏任何追踪问题的能力。我是使用单独的数据库还是只使用文本文件? 我的粒度如何?最初,我想简单地记录诸如“日期 - 在我的视图中”之类的内容。但是,正如我正在考虑的那样,最好记录视图中发生的所有内容。这样做可能会使日志大量! 而且还会使我的代码变得丑陋,因为代码中混入了如此多的日志条目行。这种细节: 日期 - 进入视图 myView 日期 - 在视图 myView 中,从 DB 中检索到对象 myObject 日期 - 在视图 myView 中,将 myObject 字段 myField 设置为 myNewValue 日期 - 离开 myView这些是我目前的主要想法。在这方面有什么建议吗?
谢谢
【问题讨论】:
你可以查看这个项目:eventlog 【参考方案1】:我认为最好和正确的方法是创建您自己的自定义中间件,您可以在其中记录您需要的所有内容。
以下是有关该主题的一些链接:
中间件sn-ps http://djangosnippets.org/snippets/2624/ http://djangosnippets.org/snippets/290/ http://djangosnippets.org/snippets/264/ django-logging-middleware(相当老的可能会给你一个想法) django-request django.db.backends日志记录 Is there a Django middleware/plugin that logs all my requests in a organized fashion? Django verbose request logging log all sql queries django orm, how to view (or log) the executed query?另外,考虑使用sentry 错误记录和聚合平台,而不是将日志写入数据库。仅供参考,请参阅using a database for logging。
【讨论】:
【参考方案2】:如果您想记录在每个视图中运行的任何操作,例如,您可以将entered view A
和exited view A
替换为以下语句中的一行:view A - 147ms
。
正如 alecxe 所说,您可以记录请求/SQL,使用中间件有很多方法可以做到这一点。关于数据库(对象)操作,您可以将单个 save
s、update
s 和 delete
s 与信号联系起来。
对于批量 update
s 和 delete
s,您可以(这不是一种干净的方法,但它会起作用)monkey-patch manager 和 queryset 方法来添加日志记录。
这样您就可以记录操作而不是 SQL。
我会看到这样的行:
[2013/09/11 15:11:12.0153] view app.module.view 200 148ms
[2013/09/11 15:11:12.0189] orm save:auth.User,id=1 3ms
这是一个快速而肮脏的提议,但也许值得。
【讨论】:
以上是关于Django - 记录每个视图的操作的主要内容,如果未能解决你的问题,请参考以下文章
当表单操作设置为“。”时,Django 重定向到不同的视图。