Files
REPO_TEST/common/logger.py
2025-07-23 20:41:13 +08:00

101 lines
2.8 KiB
Python
Raw 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.

# -*- coding:utf-8 -*-
# 日志管理模块
import os
import logging
from typing import Optional
from datetime import datetime
class LoggerManager:
"""日志管理类,用于配置和创建日志器"""
@staticmethod
def setup_logger(name: str, log_file: Optional[str] = None,
level: int = logging.INFO,
format_str: str = '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
console_output: bool = True) -> logging.Logger:
"""
设置并返回一个日志器
Args:
name: 日志器名称
log_file: 日志文件路径None表示不输出到文件
level: 日志级别
format_str: 日志格式
console_output: 是否输出到控制台
Returns:
配置好的日志器
"""
# 创建日志器
logger = logging.getLogger(name)
logger.setLevel(level)
# 创建格式化器
formatter = logging.Formatter(format_str)
# 如果指定了日志文件
if log_file:
# 确保日志目录存在
log_dir = os.path.dirname(log_file)
if log_dir and not os.path.exists(log_dir):
os.makedirs(log_dir)
# 创建文件处理器
file_handler = logging.FileHandler(log_file)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
# 如果需要输出到控制台
if console_output:
# 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
return logger
@staticmethod
def get_timestamped_log_path(base_dir: str, prefix: str, ext: str = '.log') -> str:
"""
生成带时间戳的日志文件路径
Args:
base_dir: 基础目录
prefix: 文件名前缀
ext: 文件扩展名
Returns:
完整的日志文件路径
"""
# 确保基础目录存在
if not os.path.exists(base_dir):
os.makedirs(base_dir)
# 生成时间戳
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
# 构建文件名
filename = f"{prefix}_{timestamp}{ext}"
return os.path.join(base_dir, filename)
# 创建一个全局日志器
def get_logger(name: str = 'repo_test', log_file: Optional[str] = None,
level: int = logging.INFO) -> logging.Logger:
"""
获取全局日志器
Args:
name: 日志器名称
log_file: 日志文件路径
level: 日志级别
Returns:
日志器
"""
return LoggerManager.setup_logger(name, log_file, level)
# 默认日志器
default_logger = get_logger()