view_logs.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. """实时查看对话日志"""
  2. import os
  3. import time
  4. from pathlib import Path
  5. from datetime import datetime
  6. # 日志目录
  7. LOGS_DIR = Path(__file__).parent / "logs"
  8. today = datetime.now().strftime("%Y-%m-%d")
  9. LOG_FILE = LOGS_DIR / f"dialogue_{today}.log"
  10. def tail_log_file(filename, interval=1):
  11. """实时查看日志文件 (类似tail -f)"""
  12. print("\n" + "="*60)
  13. print(f"📝 实时查看对话日志")
  14. print(f"📂 日志文件: {filename}")
  15. print("="*60)
  16. print("\n按 Ctrl+C 停止查看\n")
  17. # 如果文件不存在,等待创建
  18. while not filename.exists():
  19. print(f"⏳ 等待日志文件创建: {filename}")
  20. time.sleep(interval)
  21. # 打开文件
  22. with open(filename, 'r', encoding='utf-8') as f:
  23. # 移动到文件末尾
  24. f.seek(0, 2)
  25. try:
  26. while True:
  27. line = f.readline()
  28. if line:
  29. print(line, end='')
  30. else:
  31. time.sleep(interval)
  32. except KeyboardInterrupt:
  33. print("\n\n✅ 停止查看日志")
  34. def view_full_log(filename):
  35. """查看完整日志"""
  36. print("\n" + "="*60)
  37. print(f"📝 查看完整对话日志")
  38. print(f"📂 日志文件: {filename}")
  39. print("="*60 + "\n")
  40. if not filename.exists():
  41. print(f"❌ 日志文件不存在: {filename}")
  42. return
  43. with open(filename, 'r', encoding='utf-8') as f:
  44. content = f.read()
  45. print(content)
  46. print("\n" + "="*60)
  47. print("✅ 日志查看完成")
  48. print("="*60 + "\n")
  49. def list_log_files():
  50. """列出所有日志文件"""
  51. print("\n" + "="*60)
  52. print(f"📂 日志文件列表")
  53. print(f"📁 目录: {LOGS_DIR}")
  54. print("="*60 + "\n")
  55. if not LOGS_DIR.exists():
  56. print("❌ 日志目录不存在")
  57. return
  58. log_files = sorted(LOGS_DIR.glob("dialogue_*.log"), reverse=True)
  59. if not log_files:
  60. print("📭 暂无日志文件")
  61. return
  62. for i, log_file in enumerate(log_files, 1):
  63. size = log_file.stat().st_size
  64. size_kb = size / 1024
  65. mtime = datetime.fromtimestamp(log_file.stat().st_mtime)
  66. print(f"{i}. {log_file.name}")
  67. print(f" 大小: {size_kb:.2f} KB")
  68. print(f" 修改时间: {mtime.strftime('%Y-%m-%d %H:%M:%S')}")
  69. print()
  70. if __name__ == "__main__":
  71. import sys
  72. if len(sys.argv) > 1:
  73. command = sys.argv[1]
  74. if command == "tail":
  75. # 实时查看
  76. tail_log_file(LOG_FILE)
  77. elif command == "view":
  78. # 查看完整日志
  79. view_full_log(LOG_FILE)
  80. elif command == "list":
  81. # 列出所有日志
  82. list_log_files()
  83. else:
  84. print(f"❌ 未知命令: {command}")
  85. print("\n使用方法:")
  86. print(" python view_logs.py tail # 实时查看日志")
  87. print(" python view_logs.py view # 查看完整日志")
  88. print(" python view_logs.py list # 列出所有日志文件")
  89. else:
  90. # 默认实时查看
  91. tail_log_file(LOG_FILE)