logger.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import logging
  2. import json
  3. from datetime import datetime
  4. import os
  5. from typing import Dict, Any
  6. from pathlib import Path
  7. # 确保日志目录存在
  8. LOG_DIR = Path("chat_logs")
  9. LOG_DIR.mkdir(exist_ok=True)
  10. # 配置日志
  11. def setup_logging():
  12. """配置日志系统"""
  13. # 主日志记录器
  14. logger = logging.getLogger("chat_logger")
  15. logger.setLevel(logging.INFO)
  16. # 避免重复添加handler
  17. if not logger.handlers:
  18. # 文件处理器 - 按天分割
  19. log_file = LOG_DIR / f"chat_{datetime.now().strftime('%Y%m%d')}.log"
  20. file_handler = logging.FileHandler(log_file, encoding="utf-8")
  21. file_handler.setLevel(logging.INFO)
  22. # 控制台处理器
  23. console_handler = logging.StreamHandler()
  24. console_handler.setLevel(logging.INFO)
  25. # 格式化
  26. formatter = logging.Formatter(
  27. "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
  28. datefmt="%Y-%m-%d %H:%M:%S",
  29. )
  30. file_handler.setFormatter(formatter)
  31. console_handler.setFormatter(formatter)
  32. logger.addHandler(file_handler)
  33. logger.addHandler(console_handler)
  34. return logger
  35. # 初始化日志
  36. chat_logger = setup_logging()
  37. def log_chat_entry(user_id: str, user_message: str, agent_response: Dict[str, Any]):
  38. """记录完整的对话日志"""
  39. try:
  40. log_entry = {
  41. "timestamp": datetime.now().isoformat(),
  42. "user_id": user_id,
  43. "user_message": user_message,
  44. "agent_response": {
  45. "final_answer": agent_response.get("final_answer", ""),
  46. "all_ai_messages_count": len(agent_response.get("all_ai_messages", [])),
  47. "all_messages_count": len(agent_response.get("all_messages", [])),
  48. "tool_calls_count": len(agent_response.get("tool_calls", [])),
  49. },
  50. "all_messages": [
  51. {
  52. "type": msg.get("type"),
  53. "content": msg.get("content", "")[:500], # 限制长度
  54. "tool_calls": msg.get("tool_calls"),
  55. "index": msg.get("index"),
  56. }
  57. for msg in agent_response.get("all_messages", [])
  58. ],
  59. "tool_calls": agent_response.get("tool_calls", []),
  60. }
  61. # 记录到日志文件
  62. chat_logger.info(f"对话记录 - Thread: {user_id}")
  63. chat_logger.info(f"用户消息: {user_message}")
  64. chat_logger.info(
  65. f"Agent响应: {agent_response.get('final_answer', '')[:200]}..."
  66. )
  67. # 保存详细日志到单独文件
  68. detailed_log_file = (
  69. LOG_DIR
  70. / f"detailed_{user_id}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
  71. )
  72. with open(detailed_log_file, "w", encoding="utf-8") as f:
  73. json.dump(log_entry, f, ensure_ascii=False, indent=2)
  74. chat_logger.info(f"详细日志已保存到: {detailed_log_file}")
  75. except Exception as e:
  76. chat_logger.error(f"记录日志时出错: {str(e)}")