2

我正在考虑为我的 django Web 应用程序创建一个日志系统。Web 应用程序的使用非常全面(涵盖业务流程的所有方面),因此我想跟踪发生的每个事件。具体来说,我想记录每个运行的视图,而不仅仅是“主要”视图,并可能记录视图执行时发生的事情。

当我处于日志系统的“想法”阶段时,我很快就遇到了一些让我不确定如何进行的问题。以下是我的主要问题:

  • 我正在考虑将所有事件记录在主 Web 应用程序保存其数据的同一个 MySQL 数据库中。我担心的是将 MySQL 数据库膨胀成一个庞大的数据库。此外,如果数据库崩溃或以某种方式被破坏(是的,我有备份),我也会丢失我的日志,这会破坏任何追踪问题的能力。我是使用单独的数据库还是只使用文本文件?
  • 我要多细化?最初,我想简单地记录诸如“日期 - 在我的视图中”之类的内容。但是,正如我正在考虑的那样,最好记录视图中发生的所有内容。这样做可能会使日志变得庞大!并且还会使我的代码变得丑陋,因为代码中混入了如此多的日志条目行。这种细节:
    • 日期 - 进入视图 myView
    • 日期 - 在视图 myView 中,从数据库中检索对象 myObject
    • 日期 - 在视图 myView 中,将 myObject 字段 myField 设置为 myNewValue
    • 日期 - 离开 myView

这些是我目前的主要想法。在这方面有什么建议吗?

谢谢

4

2 回答 2

6

我认为最好和正确的方法是创建自己的自定义中间件,您可以在其中记录您需要的所有内容。

以下是有关该主题的一些链接:

另外,考虑使用哨兵错误记录和聚合平台,而不是将日志写入数据库。仅供参考,请参阅使用数据库进行日志记录

于 2013-09-10T18:10:55.853 回答
0

如果您想记录在每个视图中运行的任何操作,例如,您可以将entered view A和替换exited view A为以下单词中的一行:view A - 147ms. 正如 alecxe 所说,您可以记录请求/SQL,使用中间件有很多方法可以做到这一点。关于数据库(对象)操作,您可以将单个saves、updates 和deletes 与信号联系起来。对于 bulk updates 和deletes,您可以(这不是一种干净的方法,但它会起作用)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

这是一个快速而肮脏的提议,但是,也许它是值得的。

于 2013-09-10T19:12:59.597 回答