#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 日志配置模块 为多进程录音系统提供日志记录功能 """ import logging import os import sys from datetime import datetime from typing import Optional def setup_process_logger(process_name: str, log_dir: str = "logs") -> logging.Logger: """ 为进程设置日志记录器 Args: process_name: 进程名称(用于日志文件名) log_dir: 日志目录路径 Returns: 配置好的日志记录器 """ # 创建日志目录 if not os.path.exists(log_dir): os.makedirs(log_dir) # 生成日志文件名(包含时间戳) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") log_file = os.path.join(log_dir, f"{process_name}_{timestamp}.log") # 创建日志记录器 logger = logging.getLogger(f"{process_name}_logger") logger.setLevel(logging.DEBUG) # 清除现有的处理器 logger.handlers.clear() # 文件处理器(记录所有级别) file_handler = logging.FileHandler(log_file, encoding='utf-8') file_handler.setLevel(logging.DEBUG) # 控制台处理器(只记录INFO及以上级别) console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) # 创建格式化器 file_formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) console_formatter = logging.Formatter( '%(asctime)s - %(levelname)s - %(message)s', datefmt='%H:%M:%S' ) # 设置格式化器 file_handler.setFormatter(file_formatter) console_handler.setFormatter(console_formatter) # 添加处理器 logger.addHandler(file_handler) logger.addHandler(console_handler) logger.info(f"日志系统初始化完成 - 进程: {process_name}") logger.info(f"日志文件: {log_file}") return logger class ProcessLogger: """进程日志包装器""" def __init__(self, process_name: str, log_dir: str = "logs"): self.process_name = process_name self.logger = setup_process_logger(process_name, log_dir) def debug(self, message: str): """调试日志""" self.logger.debug(f"[{self.process_name}] {message}") def info(self, message: str): """信息日志""" self.logger.info(f"[{self.process_name}] {message}") def warning(self, message: str): """警告日志""" self.logger.warning(f"[{self.process_name}] {message}") def error(self, message: str): """错误日志""" self.logger.error(f"[{self.process_name}] {message}") def critical(self, message: str): """严重错误日志""" self.logger.critical(f"[{self.process_name}] {message}")