Newer
Older
go-algo-server / global_logger.py
zhangyingjie on 2 Apr 1 KB 增加点位识别信息上报
# logger.py
import logging.handlers
import os
import sys
from logging.handlers import TimedRotatingFileHandler


def process_log_data(data, head=50, tail=50):
    """处理日志数据,将 'picture' 键的值截断,其他键保持原样"""
    processed = {}
    for k, v in data.items():
        if isinstance(v, str):
            # 如果字符串太长,进行截断显示
            if len(v) > head + tail:
                processed[k] = v[:head] + "..." + v[-tail:]
            else:
                processed[k] = v
        else:
            processed[k] = v
    return processed


# 确保日志目录存在
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)

# 创建控制台处理器
utf8_stream = open(sys.__stdout__.fileno(), mode='w', encoding='utf-8', buffering=1)
console_handler = logging.StreamHandler(utf8_stream)
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)