【问题标题】:Tracing requests of users by logging their actions to DB in django通过将用户的操作记录到 django 中的数据库来跟踪用户的请求
【发布时间】:2011-10-22 09:06:53
【问题描述】:

我想通过在 Django 中将用户的请求作为纯文本记录到数据库中来跟踪用户在我的网站中的操作。

我考虑编写一个自定义装饰器并将其放置到我想要跟踪的每个视图中。 但是,我在设计中遇到了一些麻烦。 首先,这样的日志记录机制是否合理,或者因为我的日志表会迅速扩大它会导致一些性能问题? 其次,我的日志表应该如何设计?

如果用户调用search 视图,我想保留关键字,或者如果用户调用details of item 视图,我想保留项目的ID。 此外,应该保留用户的IP地址,但是如果他们像许多公司一样通过单个IP地址连接,我怎么能分开用户。

如果您认为我的问题不清楚,我很乐意详细解释。

谢谢

【问题讨论】:

    标签: django logging ip-address trace


    【解决方案1】:

    我不会那样做。如果这是一个生产服务,那么你有一个适当的 Web 服务器在它前面运行,对吗? Apache,或者 nginx 什么的。它可以做日志记录,而且做得很好,并且可以写入不会使数据库膨胀的表单,并且有大量的分析工具用于日志分析。

    你将不得不在你的装饰器中复制很多这样的功能,例如当你想要打开或关闭它,或者改变日志级别时。通过在 django 中完成所有操作,您唯一可以获得的是超精细控制的可能性,例如仅记录 ID 号大于 X 或其他内容的博客文章的视图。但通常您不想要那种详细程度,您会记录所有内容并在分析阶段进行任何剥离。您目前没有给出任何理由为什么需要从 Django 中执行此操作。

    如果您真的想在 RDBMS 中使用它,那么将 apache 日志文件读入 Postgres 或 MySQL 或其中一种昂贵的文件是相当简单的。

    【讨论】:

      【解决方案2】:

      您应该记住的一件事是,SQL 数据库不会为您提供非常好的写入性能(与读取相比),因此如果您遇到繁重的负载,您可能应该寻找更好的内存解决方案(例如,一些键值对存储,例如 redis)。

      但请记住,特别是如果您使用非 sql 解决方案,您应该知道您想对收集的数据做什么(只需显示类似“日志”的内容或进行一些更深入的搜索/查询数据)。

      如果您想识别来自同一 IP 地址的不同用户,您可能应该寻找基于 cookie 的解决方案(如果您使用 django's session framework 会话默认通过 cookie 识别 - 所以您可以简单地使用会话)。另一种解决方案是在页面加载到浏览器后通过 javascript“异步”进行日志记录(这可以为您提供更多识别用户的可能性并避免在生成页面时产生额外的负载)。

      【讨论】:

        猜你喜欢
        • 2016-06-20
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        • 1970-01-01
        • 2020-01-15
        • 1970-01-01
        • 2013-11-01
        • 1970-01-01
        相关资源
        最近更新 更多