123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- # -*- coding=utf-8 -*-
- import time, os
- import traceback
- from loguru import logger
- from threading import Lock
- from tools.ali_log import put_logs
- class SimpleLogger:
- """
- 简易日志:存放几乎没用的大量gpt日志
- """
- def __init__(self, base_file_name: str = "ai_log"):
- self.base_file_name = "log/" + base_file_name
- self.file_ext = ".txt"
- self.max_size = 10 * 1024 * 1024
- self.current_file = self._get_current_file()
- self.lock = Lock()
- if not os.path.exists("log"):
- os.mkdir("log")
- def _get_current_file(self):
- """获取当前应该写入的文件"""
- i = 1
- while True:
- file_name = f"{self.base_file_name}_{i}{self.file_ext}"
- if not os.path.exists(file_name) or os.path.getsize(file_name) < self.max_size:
- return file_name
- i += 1
- def _check_file_size(self):
- """检查文件大小,如果需要则切换到新文件"""
- try:
- if os.path.getsize(self.current_file) >= self.max_size:
- self.current_file = self._get_current_file()
- except FileNotFoundError:
- with open(f"{self.base_file_name}_1{self.file_ext}", "a", encoding="utf-8") as log_file:
- log_file.write(f"Hello World\n")
- def log(self, message: str, level="INFO"):
- """记录日志到文件"""
- self._check_file_size()
- date_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
- with self.lock:
- with open(self.current_file, "a", encoding="utf-8") as log_file:
- log_file.write(f"{date_time} 【{level}】 {str(message)}\n\n")
- def info(self, message: str):
- """记录INFO级别的日志"""
- self.log(message, "INFO")
- def warning(self, message: str):
- """记录WARNING级别的日志"""
- self.log(message, "WARNING")
- def error(self, message: str):
- """记录ERROR级别的日志"""
- message = "\n" + "-" * 20 + "\n" + message + "\n" + "-" * 20
- self.log(message, "ERROR")
- def debug(self, message: str):
- """记录DEBUG级别的日志"""
- self.log(message, "DEBUG")
- logger.remove(handler_id=None)
- logger.add('log/log.log', level="INFO", rotation="5 MB", encoding="utf-8", retention="7 days")
- logger.add('log/error.log', level="ERROR", rotation="5 MB", encoding="utf-8", retention="7 days")
- simple_logger = SimpleLogger()
- def exception_handler(func):
- def wrapper(*args, **kwargs):
- try:
- return func(*args, **kwargs)
- except Exception as e:
- logger.error(f"{type(e).__name__}: {e}")
- traceback_str = traceback.format_exc()
- logger.error(f"错误追溯:{traceback_str}")
- return wrapper
- def log_err_e(e: Exception, msg=None):
- if msg:
- logger.error(f"{msg}{type(e).__name__}:{e}")
- traceback_str = traceback.format_exc()
- logger.error(traceback_str)
- class AliyunLogHandler:
- @staticmethod
- def write(message):
- put_logs(message)
- if os.getenv("env") != "development":
- print("这是正式环境,加载阿里云日志")
- aliyun_log_handler = AliyunLogHandler()
- logger.add(aliyun_log_handler, enqueue=True)
- if __name__ == '__main__':
- #
- import os
- os.chdir("..")
- logger.error("test信息0123456789.*/-")
|