감사 로그¶
Wagtail은 객체에 대해 수행된 작업을 기록하는 메커니즘을 제공합니다. 페이지 생성, 업데이트, 삭제, 잠금 및 잠금 해제, 개정 예약, 개인 정보 변경과 같은 일반적인 활동은 모델 수준에서 자동으로 기록됩니다.
Wagtail 관리자는 작업 로그 항목을 사용하여 사이트 전체 및 페이지별 변경 기록을 제공합니다. 기록된 작업에 대한 추가 컨텍스트를 제공하는 ‘작업’ 레지스트리를 사용합니다.
감사 로그 기반 페이지 기록은 개정 목록 페이지를 대체하지만 개정별 항목에 대한 필터를 제공합니다.
참고
감사 로그는 개정을 대체하지 않습니다.
wagtail.log_actions.log 함수를 사용하여 자신의 코드에 로깅을 추가할 수 있습니다.
- log(instance, action, user=None, uuid=None, title=None, data=None)¶
감사 로그에 항목을 추가합니다.
- 매개변수:
instance – 작업이 수행되는 모델 인스턴스
action – 수행되는 작업의 코드 이름입니다. 아래 나열된 이름 중 하나이거나 register_log_actions 훅을 통해 정의된 사용자 지정 작업일 수 있습니다.
user – 선택 사항 - 작업을 시작하는 사용자입니다. 관리자 뷰 내에서 기록된 작업의 경우, 로그인한 사용자로 기본 설정됩니다.
uuid – 선택 사항 - 동일한 UUID가 지정된 로그 항목은 동일한 사용자 작업의 일부로 발생했음을 나타냅니다(예: 페이지가 생성 시 즉시 게시되는 경우).
title – 기록되는 인스턴스의 문자열 표현입니다. 기본적으로 Wagtail은 페이지 객체에 대해 인스턴스의
str표현 또는get_admin_display_title을 사용하려고 시도합니다.data – 선택 사항 - 로그 항목에 저장할 추가 JSON 직렬화 가능 데이터 사전입니다.
참고
로깅을 추가할 때 객체에 발생하는 작업 또는 작업을 기록해야 합니다. 예를 들어, 사용자가 페이지를 생성하고 게시하는 경우 “생성” 항목과 “게시” 항목이 있어야 합니다. 또는 사용자가 게시된 페이지를 복사하고 게시된 상태를 유지하도록 선택하는 경우 새 페이지에 대한 “복사” 및 “게시” 항목이 있어야 합니다.
# mypackage/views.py
from wagtail.log_actions import log
def copy_for_translation(page):
# ...
page.copy(log_action='mypackage.copy_for_translation')
def my_method(request, page):
# ..
# 수동으로 작업 기록
data = {
'make': {'it': 'so'}
}
log(
instance=page, action='mypackage.custom_action', data=data
)
Wagtail에서 제공하는 로그 작업¶
작업 |
참고 |
|---|---|
|
객체가 생성되었습니다. |
|
객체가 편집되었습니다 (페이지의 경우 초안으로 저장됨) |
|
객체가 삭제되었습니다. 관리자에게만 사이트 기록에 표시됩니다. |
|
페이지가 게시되었습니다. |
|
초안이 게시되도록 예약되었습니다. |
|
|
|
“예약된 게시 취소”를 통해 게시 예정 초안이 취소되었습니다. |
|
페이지가 게시 취소되었습니다. |
|
|
|
페이지가 잠겼습니다. |
|
페이지 잠금이 해제되었습니다. |
|
페이지 이름이 변경되었습니다. |
|
페이지가 이전 초안으로 되돌려졌습니다. |
|
페이지가 새 위치로 복사되었습니다. |
|
페이지가 번역을 위해 새 로케일로 복사되었습니다. |
|
페이지가 새 위치로 이동되었습니다. |
|
부모 아래 페이지의 순서가 변경되었습니다. |
|
페이지가 제한되었습니다. |
|
페이지 제한이 업데이트되었습니다. |
|
페이지 제한이 제거되었습니다. |
|
워크플로에서 페이지가 중재를 위해 제출되었습니다. |
|
워크플로 작업에서 초안이 승인되었습니다. |
|
워크플로 작업에서 초안이 거부되었고 변경이 요청되었습니다. |
|
초안이 워크플로에 다시 제출되었습니다. |
|
워크플로가 취소되었습니다. |
로그 컨텍스트¶
wagtail.log_actions 모듈은 가져오기 스크립트와 같이 많은 수의 작업을 기록하는 코드를 단순화하는 컨텍스트 관리자를 제공합니다.
from wagtail.log_actions import LogContext
with LogContext(user=User.objects.get(username='admin')):
# ...
log(page, 'wagtail.edit')
# ...
log(page, 'wagtail.publish')
블록 내의 모든 log 호출은 지정된 사용자에게 귀속되며 공통 UUID가 할당됩니다. Wagtail 관리자 내의 뷰에 대해 로그 컨텍스트가 자동으로 생성됩니다.
로그 모델¶
로그는 wagtail.models.PageLogEntry(페이지 인스턴스에 대한 작업용) 및 wagtail.models.ModelLogEntry(다른 모든 모델에 대한 작업용) 모델을 통해 데이터베이스에 저장됩니다. 페이지 로그는 현재 사용자의 권한에 따라 보고서를 필터링할 수 있도록 자체 모델에 저장됩니다. 이는 일반 외래 키로는 효율적으로 수행할 수 없습니다.
자신의 모델에 ModelLogEntry 가 부적합하게 만드는 복잡한 보고 요구 사항이 있는 경우, 자체 로그 모델에 기록되도록 구성할 수 있습니다. 이는 추상 wagtail.models.BaseLogEntry 모델을 서브클래싱하고, 로그 레지스트리의 register_model 메서드를 사용하여 해당 모델을 등록함으로써 수행됩니다.
from myapp.models import Sprocket, SprocketLogEntry
# 여기서 SprocketLogEntry는 BaseLogEntry의 서브클래스입니다.
@hooks.register('register_log_actions')
def sprocket_log_model(actions):
actions.register_model(Sprocket, SprocketLogEntry)