87 lines
2.6 KiB
Python
87 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from app.core.logging import get_logger, sanitize_log_value
|
|
from app.core.request_context import get_request_id
|
|
from app.db.session import async_session_factory
|
|
from app.models.system_log import AuditLog, SystemLog
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
async def record_system_log(
|
|
*,
|
|
source: str,
|
|
level: str,
|
|
message: str,
|
|
service: str | None = None,
|
|
module: str | None = None,
|
|
event: str | None = None,
|
|
request_id: str | None = None,
|
|
trace_id: str | None = None,
|
|
user_id: int | None = None,
|
|
category: str | None = None,
|
|
context: dict[str, Any] | None = None,
|
|
) -> None:
|
|
try:
|
|
async with async_session_factory() as session:
|
|
session.add(
|
|
SystemLog(
|
|
source=source,
|
|
service=service,
|
|
module=module,
|
|
event=event,
|
|
level=level.lower(),
|
|
message=str(sanitize_log_value(message)),
|
|
request_id=request_id or get_request_id(),
|
|
trace_id=trace_id,
|
|
user_id=user_id,
|
|
category=category,
|
|
context=sanitize_log_value(context or {}),
|
|
)
|
|
)
|
|
await session.commit()
|
|
except Exception:
|
|
logger.exception_event(
|
|
"Failed to persist system log",
|
|
event="system_log.persist.failed",
|
|
context={"event_name": event, "source": source},
|
|
)
|
|
|
|
|
|
async def record_audit_log(
|
|
*,
|
|
action: str,
|
|
actor_id: int | None = None,
|
|
actor_name: str | None = None,
|
|
target_type: str | None = None,
|
|
target_id: str | None = None,
|
|
result: str | None = None,
|
|
request_id: str | None = None,
|
|
ip: str | None = None,
|
|
details: dict[str, Any] | None = None,
|
|
) -> None:
|
|
try:
|
|
async with async_session_factory() as session:
|
|
session.add(
|
|
AuditLog(
|
|
actor_id=actor_id,
|
|
actor_name=actor_name,
|
|
action=action,
|
|
target_type=target_type,
|
|
target_id=target_id,
|
|
result=result,
|
|
request_id=request_id or get_request_id(),
|
|
ip=ip,
|
|
details=sanitize_log_value(details or {}),
|
|
)
|
|
)
|
|
await session.commit()
|
|
except Exception:
|
|
logger.exception_event(
|
|
"Failed to persist audit log",
|
|
event="audit_log.persist.failed",
|
|
context={"action": action},
|
|
)
|