# 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_algo_server_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)
