58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
# ===========================================
|
|
# 班级操行分管理系统 - 后端服务
|
|
#
|
|
# 开发者: Canglan
|
|
# 联系方式: admin@sea-studio.top
|
|
# 版权归属: Sea Network Technology Studio
|
|
# 许可证: MIT License
|
|
#
|
|
# 版权所有 © Sea Network Technology Studio
|
|
# ===========================================
|
|
|
|
from models.log import LoginLogModel, OperationLogModel
|
|
from middleware.permission import PermissionChecker
|
|
from utils.logger import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
class LogService:
|
|
"""日志服务"""
|
|
|
|
@staticmethod
|
|
async def write_login_log(username: str, login_result: int, ip: str, user_agent: str = None, fail_reason: str = None):
|
|
"""
|
|
写入登录日志(异步,不阻塞主流程)
|
|
"""
|
|
try:
|
|
await LoginLogModel.create(
|
|
username=username,
|
|
login_result=login_result,
|
|
ip_address=ip,
|
|
user_agent=user_agent,
|
|
fail_reason=fail_reason
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"写入登录日志失败: {e}")
|
|
|
|
@staticmethod
|
|
async def write_operation_log(operator_id: int, operator_name: str, operator_role: str,
|
|
operation_type: str, target_type: str = None,
|
|
target_id: int = None, details: str = None, ip: str = None):
|
|
"""
|
|
写入操作日志(异步,不阻塞主流程)
|
|
"""
|
|
try:
|
|
await OperationLogModel.create(
|
|
operator_id=operator_id,
|
|
operator_name=operator_name,
|
|
operator_role=operator_role,
|
|
operation_type=operation_type,
|
|
target_type=target_type,
|
|
target_id=target_id,
|
|
details=details,
|
|
ip_address=ip
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"写入操作日志失败: {e}")
|