47 lines
1.8 KiB
Python
47 lines
1.8 KiB
Python
"""日志相关Schema"""
|
|
from datetime import datetime
|
|
from typing import Optional, Literal
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class LogCreate(BaseModel):
|
|
"""日志写入"""
|
|
trace_id: Optional[str] = Field(None, description="链路追踪ID")
|
|
tenant_id: Optional[int] = Field(None, description="租户ID")
|
|
user_id: Optional[int] = Field(None, description="用户ID")
|
|
app_code: str = Field(..., description="应用编码")
|
|
log_type: Literal['request', 'error', 'app', 'biz', 'audit'] = Field(..., description="日志类型")
|
|
level: Literal['debug', 'info', 'warn', 'error', 'fatal'] = Field('info', description="级别")
|
|
category: Optional[str] = Field(None, description="分类")
|
|
message: str = Field(..., description="消息")
|
|
context: Optional[dict] = Field(None, description="上下文")
|
|
method: Optional[str] = Field(None, description="HTTP方法")
|
|
path: Optional[str] = Field(None, description="请求路径")
|
|
status_code: Optional[int] = Field(None, description="HTTP状态码")
|
|
duration_ms: Optional[int] = Field(None, description="耗时(ms)")
|
|
error_type: Optional[str] = Field(None, description="错误类型")
|
|
stack_trace: Optional[str] = Field(None, description="堆栈")
|
|
action: Optional[str] = Field(None, description="操作")
|
|
target_type: Optional[str] = Field(None, description="目标类型")
|
|
target_id: Optional[str] = Field(None, description="目标ID")
|
|
log_time: datetime = Field(..., description="日志时间")
|
|
|
|
|
|
class LogResponse(BaseModel):
|
|
"""日志响应"""
|
|
id: int
|
|
trace_id: Optional[str]
|
|
app_code: str
|
|
log_type: str
|
|
level: str
|
|
message: str
|
|
log_time: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class BatchLogRequest(BaseModel):
|
|
"""批量日志请求"""
|
|
logs: list[LogCreate]
|