Spaces:
Sleeping
Sleeping
| import logging | |
| import sys | |
| from pathlib import Path | |
| from logging.handlers import TimedRotatingFileHandler | |
| from middleware.trace import get_trace_id | |
| # 确保日志目录存在 | |
| LOG_DIR = Path(__file__).parent.parent / "logs" | |
| LOG_DIR.mkdir(exist_ok=True) | |
| # 自定义日志格式类 | |
| class TraceFormatter(logging.Formatter): | |
| def format(self, record): | |
| # 获取当前的 trace_id | |
| trace_id = get_trace_id() | |
| # 在日志消息中添加 trace_id | |
| if trace_id: | |
| record.msg = f"[trace_id={trace_id}] {record.msg}" | |
| return super().format(record) | |
| # 配置日志记录器 | |
| logger = logging.getLogger("backend") | |
| logger.setLevel(logging.INFO) | |
| # 创建按日期分片的文件处理器 | |
| # 每天午夜轮换,保留 30 天的日志 | |
| file_handler = TimedRotatingFileHandler( | |
| LOG_DIR / "backend.log", | |
| when="midnight", | |
| interval=1, | |
| backupCount=30, | |
| encoding="utf-8" | |
| ) | |
| file_handler.setLevel(logging.INFO) | |
| file_handler.suffix = "%Y-%m-%d.log" | |
| # 创建控制台处理器 | |
| console_handler = logging.StreamHandler(sys.stdout) | |
| console_handler.setLevel(logging.INFO) | |
| # 定义日志格式 | |
| formatter = TraceFormatter( | |
| '%(asctime)s - %(name)s - %(levelname)s - %(module)s:%(funcName)s:%(lineno)d - %(message)s' | |
| ) | |
| file_handler.setFormatter(formatter) | |
| console_handler.setFormatter(formatter) | |
| # 添加处理器到记录器 | |
| if not logger.handlers: | |
| logger.addHandler(file_handler) | |
| logger.addHandler(console_handler) | |
| # 导出logger | |
| __all__ = ["logger"] |