""" 日志系统模块 使用 loguru 提供彩色日志输出和文件记录功能 - 彩色控制台输出 - 按账号创建独立日志文件 - 敏感信息脱敏(邮箱、密码) """ from loguru import logger import sys import time from pathlib import Path import re def mask_sensitive_data(text: str) -> str: """ 脱敏处理敏感信息 - 邮箱:保留前2位和@后的域名,中间用***代替 - 密码:完全替换为 ******** """ # 邮箱脱敏: user@example.com -> us***@example.com text = re.sub( r'\b([a-zA-Z0-9]{1,2})[a-zA-Z0-9._-]*@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})\b', r'\1***@\2', text ) # 密码脱敏: password=abc123 -> password=******** text = re.sub( r'(password["\']?\s*[:=]\s*["\']?)([^"\'\s,}]+)(["\']?)', r'\1********\3', text, flags=re.IGNORECASE ) return text def setup_logger(log_level: str = "INFO"): """ 配置全局日志系统 参数: log_level: 日志级别 (DEBUG, INFO, WARNING, ERROR) """ # 移除默认处理器 logger.remove() # 添加彩色控制台输出 logger.add( sys.stderr, format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {message}", colorize=True, level=log_level, filter=lambda record: mask_sensitive_data(str(record["message"])) ) # 确保 logs 目录存在 Path("logs").mkdir(exist_ok=True) # 添加通用日志文件(所有账号的汇总日志) logger.add( "logs/app_{time:YYYY-MM-DD}.log", rotation="00:00", # 每天凌晨轮转 retention="7 days", # 保留7天 compression="zip", # 压缩旧日志 format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {message}", level="DEBUG", # 文件记录所有级别 enqueue=True # 异步写入 ) logger.info("Logger initialized") def setup_account_logger(email: str) -> str: """ 为特定账号创建独立日志文件 参数: email: 注册邮箱 返回: 日志文件路径 """ # 文件名安全处理:替换特殊字符 safe_email = email.replace("@", "_").replace(".", "_") timestamp = int(time.time()) log_path = f"logs/account_{safe_email}_{timestamp}.log" # 添加账号专属日志文件 logger.add( log_path, format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {message}", level="DEBUG", rotation="10 MB", retention="30 days", filter=lambda record: email in str(record["message"]) # 只记录相关日志 ) logger.info(f"Account logger created: {log_path}") return log_path # 初始化默认配置 setup_logger() # 导出主要接口 __all__ = ["logger", "setup_logger", "setup_account_logger", "mask_sensitive_data"]