|
@@ -96,12 +96,12 @@ class LogLevel(str, Enum):
|
|
|
class LogCategory(str, Enum):
|
|
class LogCategory(str, Enum):
|
|
|
"""日志分类 —— 按系统边界划分,用于快速过滤"""
|
|
"""日志分类 —— 按系统边界划分,用于快速过滤"""
|
|
|
|
|
|
|
|
- SYSTEM = "system" # 启动、关闭、心跳
|
|
|
|
|
- TASK = "task" # 任务调度生命周期
|
|
|
|
|
- AGENT = "agent" # Agent 执行(规划、推理、反思)
|
|
|
|
|
- TOOL = "tool" # Tool 调用(HTTP、DB 查询等)
|
|
|
|
|
- HTTP = "http" # 入站 HTTP 请求
|
|
|
|
|
- DB = "db" # 数据库操作
|
|
|
|
|
|
|
+ SYSTEM = "system" # 启动、关闭、心跳
|
|
|
|
|
+ TASK = "task" # 任务调度生命周期
|
|
|
|
|
+ AGENT = "agent" # Agent 执行(规划、推理、反思)
|
|
|
|
|
+ TOOL = "tool" # Tool 调用(HTTP、DB 查询等)
|
|
|
|
|
+ HTTP = "http" # 入站 HTTP 请求
|
|
|
|
|
+ DB = "db" # 数据库操作
|
|
|
SECURITY = "security" # 安全相关(认证、鉴权、告警)
|
|
SECURITY = "security" # 安全相关(认证、鉴权、告警)
|
|
|
|
|
|
|
|
|
|
|
|
@@ -137,7 +137,9 @@ class LogRecord(BaseModel):
|
|
|
# ── 核心字段 ──
|
|
# ── 核心字段 ──
|
|
|
level: LogLevel = Field(default=LogLevel.INFO, description="日志级别")
|
|
level: LogLevel = Field(default=LogLevel.INFO, description="日志级别")
|
|
|
category: LogCategory = Field(default=LogCategory.SYSTEM, description="日志分类")
|
|
category: LogCategory = Field(default=LogCategory.SYSTEM, description="日志分类")
|
|
|
- event: str = Field(default="", description="事件名,如 task_started / agent_think / tool_error")
|
|
|
|
|
|
|
+ event: str = Field(
|
|
|
|
|
+ default="", description="事件名,如 task_started / agent_think / tool_error"
|
|
|
|
|
+ )
|
|
|
message: str = Field(default="", description="人类可读描述,用于全文检索")
|
|
message: str = Field(default="", description="人类可读描述,用于全文检索")
|
|
|
|
|
|
|
|
# ── 追踪字段 ──
|
|
# ── 追踪字段 ──
|
|
@@ -150,7 +152,9 @@ class LogRecord(BaseModel):
|
|
|
tool_name: str = Field(default="", description="Tool 名,如 WebSearchTool")
|
|
tool_name: str = Field(default="", description="Tool 名,如 WebSearchTool")
|
|
|
|
|
|
|
|
# ── 性能字段 ──
|
|
# ── 性能字段 ──
|
|
|
- duration_ms: int = Field(default=0, description="执行耗时(毫秒),用于 P50/P99 分析")
|
|
|
|
|
|
|
+ duration_ms: int = Field(
|
|
|
|
|
+ default=0, description="执行耗时(毫秒),用于 P50/P99 分析"
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
# ── 状态与异常 ──
|
|
# ── 状态与异常 ──
|
|
|
status: LogStatus = Field(default=LogStatus.SUCCESS, description="执行状态")
|
|
status: LogStatus = Field(default=LogStatus.SUCCESS, description="执行状态")
|
|
@@ -158,7 +162,9 @@ class LogRecord(BaseModel):
|
|
|
error_message: str = Field(default="", description="异常消息全文,用于全文检索")
|
|
error_message: str = Field(default="", description="异常消息全文,用于全文检索")
|
|
|
|
|
|
|
|
# ── 扩展字段 ──
|
|
# ── 扩展字段 ──
|
|
|
- extra: Dict[str, Any] = Field(default_factory=dict, description="业务自定义 KV,JSON 索引可查询子字段")
|
|
|
|
|
|
|
+ extra: Dict[str, Any] = Field(
|
|
|
|
|
+ default_factory=dict, description="业务自定义 KV,JSON 索引可查询子字段"
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
def to_sls_items(self) -> list[tuple[str, str]]:
|
|
def to_sls_items(self) -> list[tuple[str, str]]:
|
|
|
"""转为阿里云 SLS LogItem 的 contents 格式 [(key, value), ...]
|
|
"""转为阿里云 SLS LogItem 的 contents 格式 [(key, value), ...]
|
|
@@ -180,7 +186,10 @@ class LogRecord(BaseModel):
|
|
|
("error_type", self.error_type),
|
|
("error_type", self.error_type),
|
|
|
("error_message", self.error_message),
|
|
("error_message", self.error_message),
|
|
|
# extra 存 JSON 字符串,SLS json 类型索引可解析
|
|
# extra 存 JSON 字符串,SLS json 类型索引可解析
|
|
|
- ("extra", json.dumps(self.extra, ensure_ascii=False) if self.extra else "{}"),
|
|
|
|
|
|
|
+ (
|
|
|
|
|
+ "extra",
|
|
|
|
|
+ json.dumps(self.extra, ensure_ascii=False) if self.extra else "{}",
|
|
|
|
|
+ ),
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
|
|
|