Django - 记录每个视图的操作

19 浏览
0 Comments

Django - 记录每个视图的操作

我正在考虑为我的Django网站应用创建一个日志系统。该网站应用非常全面地使用了各个方面的业务流程,所以我想要追踪每一个事件。具体来说,我想要记录每一个运行的视图,而不仅仅是“主要”的视图,并且可能记录视图在执行过程中发生的事情。

虽然我在日志系统的“构想”阶段,但我很快遇到了一些问题,让我不确定如何继续下去。以下是我主要的问题:

- 我正在考虑将所有事件记录在与主网站应用使用的MySQL数据库相同的数据库中。我担心这会使MySQL数据库变得庞大。此外,如果数据库崩溃或以某种方式被破坏(是的,我有备份),我也将丢失我的日志,这将使我无法追踪问题。我应该使用单独的数据库还是只使用文本文件?

- 我应该多细致地记录?最初,我考虑的是简单地记录“日期 - 进入视图myView”之类的内容。然而,我在思考时,发现记录视图内发生的所有事情也是很好的。这样做可能会使日志变得庞大!并且会使我的代码变得丑陋,因为其中夹杂着许多日志条目的行。这种详细程度包括:

- 日期 - 进入视图myView

- 日期 - 在视图myView中从数据库检索对象myObject

- 日期 - 在视图myView中将myObject字段myField设置为myNewValue

- 日期 - 离开视图myView

这些是我目前的主要想法。对于这个问题有什么建议吗?

谢谢。

0
0 Comments

在Django中,有一个问题是如何记录每个视图的操作。一种解决方法是创建自定义中间件,在其中记录所需的所有内容。以下是一些关于这个主题的链接:

- 中间件代码片段:

- [http://djangosnippets.org/snippets/2624/](http://djangosnippets.org/snippets/2624/)

- [http://djangosnippets.org/snippets/290/](http://djangosnippets.org/snippets/290/)

- [http://djangosnippets.org/snippets/264/](http://djangosnippets.org/snippets/264/)

- [django-logging-middleware](https://github.com/mechanicalgirl/django-logging-middleware)(可能有点过时,但可以给你提供思路)

- [django-request](https://github.com/kylef/django-request)

- [django.db.backends](https://docs.djangoproject.com/en/dev/topics/logging/#django-db-backends)日志记录

- [Is there a Django middleware/plugin that logs all my requests in a organized fashion?](https://stackoverflow.com/questions/4839297)

- [Django verbose request logging](https://stackoverflow.com/questions/12942195)

- [log all sql queries](https://stackoverflow.com/questions/4375784)

- [django orm, how to view (or log) the executed query?](https://stackoverflow.com/questions/971667)

另外,考虑使用[sentry](https://github.com/getsentry/sentry)错误日志记录和聚合平台,而不是将日志写入数据库。可以参考[using a database for logging](https://stackoverflow.com/questions/3089523)了解更多信息。

0
0 Comments

问题出现的原因是想要在每个视图中记录每个操作的日志,包括进入视图和退出视图的时间。在此之前,可以通过在代码中添加一行代码来实现日志记录,例如将entered view Aexited view A替换为view A - 147ms

根据alecxe的说法,可以使用中间件来记录请求/SQL操作,有很多方法可以实现。关于数据库(对象)操作,可以使用signals来跟踪每个saveupdatedelete

对于批量的updatedelete,可以通过修改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

这只是一个快速而不完美的解决方案,但或许值得一试。

0