在 django 应用程序中记录事件

Posted

技术标签:

【中文标题】在 django 应用程序中记录事件【英文标题】:Logging events in django application 【发布时间】:2014-07-17 02:54:34 【问题描述】:

我需要在我的 Django 1.4 应用程序中记录一些业务事件。例如,当用户发送推荐电子邮件或用户进行购买时。等等。此事件日志将用于一些业务分析。 在电子商务应用程序中是否有这样做的最佳实践?可能是服务或 django 模块?我以前从未开发过这样的系统,我需要一些建议。

【问题讨论】:

【参考方案1】:

我知道您说的是使用内置但只是为了提供另一种选择,我通常使用模型来存储一些电子商务页面中的日志操作,例如:

class MyLog(models.Model):
    LOG_ACTIONS = (
        ('login', 'User logged in'),
        ('delete_object', 'User delete object'),
        ('create_object', 'User create object'),
        ('buy_object', 'User buy object'),
        #   ...     ...     ...
        # Whatever you need here
    )
    user = models.ForeignKey(User)
    action = models.CharField(max_length=20, default='login', choices=LOG_ACTIONS, verbose_name= 'action')
    date = models.DateTimeField(auto_now_add=True, verbose_name='date')

    class Meta:
        ordering = ['-dt']
        verbose_name = 'Action log'
        verbose_name_plural = 'Actions log'

该示例已简化,您可以根据需要使用尽可能多的字段和尽可能多的日志操作。

因此,当您执行任何必须在日志中的操作时,只需为 MyLog 创建一个对象,当您想要获取所有日志操作时,只需获取 MyLog 对象,您可以按日期、用户或任何你放在那里的字段。

希望对你有帮助!

【讨论】:

看起来这是进行日志记录的最佳方式。我想过这样的事情。谢谢! 不客气!我通常选择这个选项,因为我可以自定义我正在做的项目的登录功能。 如何将其连接到视图。假设我从视图上传文件,它应该被添加到日志中? 也许你应该问一个不同的问题,我不确定我是否理解你在寻找什么 您认为将其作为一个单独的问题提出会更好吗?如果,不,你可以让我知道如何继续,然后我继续研究。【参考方案2】:

有一个内置的日志记录应用程序。查看 1.4 文档:https://docs.djangoproject.com/en/1.4/topics/logging/

【讨论】:

是的,我知道。我以为还有更具体的应用。你曾经使用过 django logger 来跟踪用户活动吗? Use the logger like this

以上是关于在 django 应用程序中记录事件的主要内容,如果未能解决你的问题,请参考以下文章

Django - 记录每个视图的操作

Django 记录 user_login_failed 信号的用户 IP

如何在 Django 表单输入字段中设置事件处理程序

如何在 Celery-Django 应用程序中监视来自工作人员的事件?

django - 将 LogEntry 加入实际模型

如何防止哨兵捕获某些未捕获的异常和记录消息的事件?