Django 记录用户活动

jon*_*s87 4 django logging

我想在我的应用程序中保留每个数据库更改事件的日志。像时间戳+用户名+哪个模型被更改,写入日志文件(只记录模型实例被修改,而不是更改是什么)。信号日志记录的结​​合似乎很自然。

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

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

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

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

这看起来像是一个黑客解决方案,我在这里忽略了什么?

rud*_*dra 5

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

from django.contrib.admin.models import LogEntry

LogEntry.objects.log_action(
                        user_id = ...,
                        content_type_id = ...,
                        object_id = ...,
                        object_repr = ....,
                        change_message = ...,
                        action_flag = ...
                       )
Run Code Online (Sandbox Code Playgroud)

您可以查看此SO 答案以获取更多详细信息。此外,您还可以向管理站点的用户授予权限,告知他们可以看到哪些日志。

在此输入图像描述

  • “django 管理日志”仅记录管理员用户的活动还是也记录每个普通用户的活动? (6认同)