Local-Voice/process_logger.py
2025-09-21 03:00:11 +08:00

98 lines
2.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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}")