【问题标题】:Django logging user activityDjango 记录用户活动
【发布时间】:2019-04-09 06:47:34
【问题描述】:

我想在我的应用程序中为每个数据库更改事件保留一个日志。诸如时间戳+用户名+更改了哪个模型,写入日志文件(仅记录模型实例已修改,而不是更改的内容)。 signalslogging 的组合似乎很自然。

所以在模型的信号中我会这样做:

import logging
...
logger = logging.getLogger(__name__)
logger.info("Order {} deleted by {}".format(order.barcode, request.user.email))

这样做的问题是日志的信息级别充满了 POST 和 GET 请求。通常的建议是,如果您不希望日志文件中的所有这些请求日志都进入更高级别(如警告),但在此处将这些事件标记为警告是没有意义的。另一种选择是使用过滤器来删除 GET/POST 日志,推荐 here。但默认情况下,警告和错误级别的日志事件也会出现在信息日志中,在这种情况下这也是不希望出现的行为,因此也必须过滤掉这些事件。此日志文件实际上只是用于记录“此用户更改此模型实例”事件。

理想情况下,员工级别的用户可以在现场访问(只读)此文件,因此我正在考虑将此文件放在 MEDIA 目录中。如果日志还包含错误跟踪,那可能是个坏主意。

这似乎是一个骇人听闻的解决方案,我在这里忽略了什么?

【问题讨论】:

    标签: django logging


    【解决方案1】:

    也许更好的方法是使用Django Admin Logs + signals。例如:

    from django.contrib.admin.models import LogEntry
    
    LogEntry.objects.log_action(
                            user_id = ...,
                            content_type_id = ...,
                            object_id = ...,
                            object_repr = ....,
                            change_message = ...,
                            action_flag = ...
                           )
    

    您可以查看SO answer 了解更多详情。您还可以从管理站点向用户授予权限,让他们知道他们可以看到哪些日志。

    【讨论】:

    • django admin logs 是只记录管理员用户的活动还是也记录每个普通用户的活动?
    猜你喜欢
    • 2021-11-19
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2011-03-10
    相关资源
    最近更新 更多