| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import logging
- import json
- from datetime import datetime
- import os
- from typing import Dict, Any
- from pathlib import Path
- # 确保日志目录存在
- LOG_DIR = Path("chat_logs")
- LOG_DIR.mkdir(exist_ok=True)
- # 配置日志
- def setup_logging():
- """配置日志系统"""
- # 主日志记录器
- logger = logging.getLogger("chat_logger")
- logger.setLevel(logging.INFO)
- # 避免重复添加handler
- if not logger.handlers:
- # 文件处理器 - 按天分割
- log_file = LOG_DIR / f"chat_{datetime.now().strftime('%Y%m%d')}.log"
- file_handler = logging.FileHandler(log_file, encoding="utf-8")
- file_handler.setLevel(logging.INFO)
- # 控制台处理器
- console_handler = logging.StreamHandler()
- console_handler.setLevel(logging.INFO)
- # 格式化
- formatter = logging.Formatter(
- "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
- datefmt="%Y-%m-%d %H:%M:%S",
- )
- file_handler.setFormatter(formatter)
- console_handler.setFormatter(formatter)
- logger.addHandler(file_handler)
- logger.addHandler(console_handler)
- return logger
- # 初始化日志
- chat_logger = setup_logging()
- def log_chat_entry(user_id: str, user_message: str, agent_response: Dict[str, Any]):
- """记录完整的对话日志"""
- try:
- log_entry = {
- "timestamp": datetime.now().isoformat(),
- "user_id": user_id,
- "user_message": user_message,
- "agent_response": {
- "final_answer": agent_response.get("final_answer", ""),
- "all_ai_messages_count": len(agent_response.get("all_ai_messages", [])),
- "all_messages_count": len(agent_response.get("all_messages", [])),
- "tool_calls_count": len(agent_response.get("tool_calls", [])),
- },
- "all_messages": [
- {
- "type": msg.get("type"),
- "content": msg.get("content", "")[:500], # 限制长度
- "tool_calls": msg.get("tool_calls"),
- "index": msg.get("index"),
- }
- for msg in agent_response.get("all_messages", [])
- ],
- "tool_calls": agent_response.get("tool_calls", []),
- }
- # 记录到日志文件
- chat_logger.info(f"对话记录 - Thread: {user_id}")
- chat_logger.info(f"用户消息: {user_message}")
- chat_logger.info(
- f"Agent响应: {agent_response.get('final_answer', '')[:200]}..."
- )
- # 保存详细日志到单独文件
- detailed_log_file = (
- LOG_DIR
- / f"detailed_{user_id}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
- )
- with open(detailed_log_file, "w", encoding="utf-8") as f:
- json.dump(log_entry, f, ensure_ascii=False, indent=2)
- chat_logger.info(f"详细日志已保存到: {detailed_log_file}")
- except Exception as e:
- chat_logger.error(f"记录日志时出错: {str(e)}")
|