loglog.py 3.3 KB

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