113 lines
2.8 KiB
Python
113 lines
2.8 KiB
Python
"""
|
||
日志系统模块
|
||
|
||
使用 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="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <level>{message}</level>",
|
||
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"]
|