一个简单的Django应用程序,用于启用审计日志记录
项目描述
有关仅Python实现(该库使用)的信息,请参阅 https://github.com/Amsterdam/python-audit-log
DataPunt Django Audit Log
DataPunt Audit Log是一个简单的Django应用程序,它将记录所有传入请求及其对应的响应到一个可配置的端点。
在请求处理阶段,日志记录器附加到请求上。在返回响应之前,该应用程序可以轻松提供额外上下文。在响应处理阶段,audit_log中间件将发送日志。
链接
快速入门
-
使用pip安装
pip install datapunt_django_audit_log
-
将 "django_audit_log" 添加到您的 INSTALLED_APPS
INSTALLED_APPS = [ ... 'django_audit_log', ]
-
将 AuditLogMiddleware 添加到您的 MIDDLEWARE
MIDDLEWARE = [ ... 'django_audit_log.middleware.AuditLogMiddleware', ]
-
当使用Django Rest Framework时,让您的视图集扩展
AuditLogReadOnlyViewset
或AuditLogViewSet
。这将为审计日志自动添加有关过滤器、结果和执行动作的上下文(见 - Django Rest Framework)。class MyViewSet(AuditLogViewSet): queryset = SomeModel.objects.all()
-
设置 AUDIT_LOG_EXEMPT_URLS 设置以确保某些URL不会记录(例如,健康检查URL)。
# If a URL path matches a regular expression in this list, the request will not be redirected to HTTPS. # The AuditLogMiddleware strips leading slashes from URL paths, so patterns shouldn’t include them, e.g. # [r'foo/bar$'] AUDIT_LOG_EXEMPT_URLS = []
在此处,所有请求/响应都将被记录。为了提供额外上下文(强烈建议您这样做),请参阅下一章节。
默认上下文信息
默认情况下,审计日志为每个请求发送以下JSON结构
{
"http_request": {
"method": "get|post|head|options|etc..",
"url": "https://datapunt.amsterdam.nl?including=querystring",
"user_agent": "full browser user agent"
},
"http_response": {
"status_code": "http status code",
"reason": "http status reason",
"headers": {
"key": "value"
}
},
"user": {
"authenticated": "True/False",
"provider": "auth backend the user authenticated with",
"realm": "optional realm when using keycloak or another provider",
"email": "email of logged in user",
"roles": "roles attached to the logged in user",
"ip": "ip address"
}
}
每个JSON条目由相应的函数设置。在这种情况下,中间件通过在process_request方法中调用set_http_request()和set_user_fom_request()来自动设置它们。在process_response方法中,通过调用set_http_response()设置最后的数据。
响应处理完毕后,中间件会通过调用send_log()自动创建日志条目。
自定义可选上下文信息
对于每个请求,都可以添加可选的上下文信息。为了获得完整的审计日志,强烈建议您在视图内部添加更多信息。
添加额外上下文非常简单。审计日志对象已经由中间件添加到请求中。因此,每个视图都可以通过请求对象简单访问它。
过滤器
request.audit_log.set_filter(self, object_name, fields, terms)
允许提供有关请求的对象类型和已使用的过滤器(用户搜索“terms”,这些“terms”在“object”的特定“fields”上匹配)的信息。
此方法将以下详细信息添加到日志中
"filter": {
"object": "Object name that is requested",
"fields": "Fields that are being filtered on, if applicable",
"terms": "Search terms, if applicable"
}
结果
request.audit_log.set_results(self, results)
允许传递一个JSON字典,详细说明返回给用户的确切结果。
开发者决定是否要添加的数据量将成为负担而不是祝福。
此方法将以下详细信息添加到日志中
"results": {
...
}
消息和日志级别
最后,可以提供日志消息和日志级别以指示请求的实际操作。这是通过调用以下方法之一来完成的:
request.audit_log.debug(self, msg)
request.audit_log.info(self, msg)
request.audit_log.warning(self, msg)
request.audit_log.error(self, msg)
request.audit_log.critical(self, msg)
这些方法将以下详细信息添加到日志中
"type": "DEBUG|INFO|WARNING|ERROR|etc",
"message": "log message"
Django Rest Framework
如果您使用Django Rest Framework,则有两个基础ViewSets可用。
AuditLogReadOnlyViewSet
扩展了ReadOnlyModelViewSet
并覆盖了retrieve()
和list()
方法。AuditLogViewSet
扩展了AuditLogReadOnlyViewSet
并覆盖了剩余的(非只读)方法create()
、update()
和destroy()
。
我们的类会检查请求,并将额外上下文信息自动添加到审计日志中。此上下文信息提供有关过滤器、结果和正在执行的操作的信息。
请注意,默认情况下,list()不会将结果添加到日志中,除非设置audit_log_list_response属性。只有当列表响应中的数据量适合存储在日志条目中时才这样做。
class MyViewSet(AuditLogViewSet):
audit_log_list_response = True
项目详细信息
下载文件
下载您平台上的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源分布
构建分布
datapunt_django_audit_log-0.4.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 74dbb738003fb4d871b1e6a87d05e35b4c6f7a28730363dae07afe4673a7890b |
|
MD5 | 28e9536021954899394ca1176aa464af |
|
BLAKE2b-256 | 54be2c6e13da09298ffa18cb6aeeeffd35b1d3cab0c45db69c8b0daab5c74d78 |