# logger.py import logging.handlers import os import sys from logging.handlers import TimedRotatingFileHandler # 确保日志目录存在 log_dir = 'logs' if not os.path.exists(log_dir): os.makedirs(log_dir) # 实例化并导出全局日志记录器 logger = logging.getLogger("casic_safe_logger") logger.setLevel(logging.DEBUG) # 设置日志级别 # 创建一个TimedRotatingFileHandler handler = TimedRotatingFileHandler( os.path.join(log_dir, 'app.log'), # 日志文件名 when='midnight', # 每天午夜滚动 interval=1 # 滚动间隔为1天 ) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # 将handler添加到日志器 logger.addHandler(handler) # 创建控制台处理器 console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) console_handler.setFormatter(formatter) logger.addHandler(console_handler) # 将标准输出和标准错误重定向到日志记录器 class StreamToLogger: def __init__(self, logger, level): self.logger = logger self.level = level def write(self, message): if message.strip(): # 忽略空消息 self.logger.log(self.level, message) def flush(self): pass # 这里不需要实现 # 捕获所有stdout和stderr的内容到日志 sys.stdout = StreamToLogger(logger, logging.INFO) sys.stderr = StreamToLogger(logger, logging.ERROR)