loglog.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # -*- coding=utf-8 -*-
  2. import os
  3. import time
  4. import traceback
  5. from threading import Lock
  6. from loguru import logger
  7. from tools.ali_log import put_logs
  8. class SimpleLogger:
  9. """
  10. 简易日志:存放几乎没用的大量gpt日志
  11. """
  12. def __init__(self, base_file_name: str = "ai_log"):
  13. self.base_file_name = "log/" + base_file_name
  14. self.file_ext = ".txt"
  15. self.max_size = 10 * 1024 * 1024
  16. self.current_file = self._get_current_file()
  17. self.lock = Lock()
  18. if not os.path.exists("log"):
  19. os.mkdir("log")
  20. def _get_current_file(self):
  21. """获取当前应该写入的文件"""
  22. i = 1
  23. while True:
  24. file_name = f"{self.base_file_name}_{i}{self.file_ext}"
  25. if not os.path.exists(file_name) or os.path.getsize(file_name) < self.max_size:
  26. return file_name
  27. i += 1
  28. def _check_file_size(self):
  29. """检查文件大小,如果需要则切换到新文件"""
  30. try:
  31. if os.path.getsize(self.current_file) >= self.max_size:
  32. self.current_file = self._get_current_file()
  33. except FileNotFoundError:
  34. with open(f"{self.base_file_name}_1{self.file_ext}", "a", encoding="utf-8") as log_file:
  35. log_file.write(f"Hello World\n")
  36. def log(self, message: str, level="INFO"):
  37. """记录日志到文件"""
  38. self._check_file_size()
  39. date_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  40. with self.lock:
  41. with open(self.current_file, "a", encoding="utf-8") as log_file:
  42. log_file.write(f"{date_time} 【{level}】 {str(message)}\n\n")
  43. def info(self, message: str):
  44. """记录INFO级别的日志"""
  45. self.log(message, "INFO")
  46. def warning(self, message: str):
  47. """记录WARNING级别的日志"""
  48. self.log(message, "WARNING")
  49. def error(self, message: str):
  50. """记录ERROR级别的日志"""
  51. message = "\n" + "-" * 20 + "\n" + message + "\n" + "-" * 20
  52. self.log(message, "ERROR")
  53. def debug(self, message: str):
  54. """记录DEBUG级别的日志"""
  55. self.log(message, "DEBUG")
  56. logger.remove(handler_id=None)
  57. logger.add('log/log.log', level="INFO", rotation="5 MB", encoding="utf-8", retention="7 days")
  58. logger.add('log/error.log', level="ERROR", rotation="5 MB", encoding="utf-8", retention="7 days")
  59. simple_logger = SimpleLogger()
  60. temp_logger = SimpleLogger(base_file_name="temp_log")
  61. def exception_handler(func):
  62. def wrapper(*args, **kwargs):
  63. try:
  64. return func(*args, **kwargs)
  65. except Exception as e:
  66. logger.error(f"{type(e).__name__}: {e}")
  67. traceback_str = traceback.format_exc()
  68. logger.error(f"错误追溯:{traceback_str}")
  69. return wrapper
  70. def log_err_e(e: Exception, msg=None):
  71. if msg:
  72. logger.error(f"{msg}{type(e).__name__}:{e}")
  73. traceback_str = traceback.format_exc()
  74. logger.error(traceback_str)
  75. class AliyunLogHandler:
  76. @staticmethod
  77. def write(message):
  78. put_logs(message)
  79. if os.getenv("env") != "development":
  80. print("这是正式环境,加载阿里云日志")
  81. aliyun_log_handler = AliyunLogHandler()
  82. logger.add(aliyun_log_handler, enqueue=True)
  83. if __name__ == '__main__':
  84. #
  85. import os
  86. os.chdir("..")
  87. logger.error("test信息0123456789.*/-")