跳转到主要内容

一个简单的Django应用程序,用于启用审计日志记录

项目描述

有关仅Python实现(该库使用)的信息,请参阅 https://github.com/Amsterdam/python-audit-log

DataPunt Django Audit Log

DataPunt Audit Log是一个简单的Django应用程序,它将记录所有传入请求及其对应的响应到一个可配置的端点。

在请求处理阶段,日志记录器附加到请求上。在返回响应之前,该应用程序可以轻松提供额外上下文。在响应处理阶段,audit_log中间件将发送日志。

链接

快速入门

  1. 使用pip安装

    pip install datapunt_django_audit_log
    
  2. 将 "django_audit_log" 添加到您的 INSTALLED_APPS

    INSTALLED_APPS = [
        ...
        'django_audit_log',
    ]
    
  3. 将 AuditLogMiddleware 添加到您的 MIDDLEWARE

    MIDDLEWARE = [
        ...
       'django_audit_log.middleware.AuditLogMiddleware',
    ]
    
  4. 当使用Django Rest Framework时,让您的视图集扩展 AuditLogReadOnlyViewsetAuditLogViewSet。这将为审计日志自动添加有关过滤器、结果和执行动作的上下文(见 - Django Rest Framework)。

    class MyViewSet(AuditLogViewSet):
        queryset = SomeModel.objects.all()
    
  5. 设置 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.tar.gz (13.1 kB 查看散列)

上传时间

构建分布

datapunt_django_audit_log-0.4.0-py3-none-any.whl (13.5 kB 查看散列)

上传时间 Python 3

由以下机构支持