Django记录用户活动

时间:2018-11-05 21:17:42

标签: django logging

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

因此,在模型的信号中,我会这样做:

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

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

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

这似乎是一个棘手的解决方案,我在这里俯瞰什么?

1 个答案:

答案 0 :(得分: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以获得更多详细信息。另外,您还可以从管理站点向填充用户授予有关他们可以看到哪些日志的权限。

enter image description here

相关问题