79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
from typing import Any
|
|
|
|
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 = logging.getLogger(__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=message,
|
|
request_id=request_id or get_request_id(),
|
|
trace_id=trace_id,
|
|
user_id=user_id,
|
|
category=category,
|
|
context=context or {},
|
|
)
|
|
)
|
|
await session.commit()
|
|
except Exception:
|
|
logger.exception("Failed to persist system log event=%s source=%s", event, 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=details or {},
|
|
)
|
|
)
|
|
await session.commit()
|
|
except Exception:
|
|
logger.exception("Failed to persist audit log action=%s", action)
|