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)}")