frist
This commit is contained in:
112
utils/logger.py
Normal file
112
utils/logger.py
Normal file
@@ -0,0 +1,112 @@
|
||||
"""
|
||||
日志系统模块
|
||||
|
||||
使用 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"]
|
||||
Reference in New Issue
Block a user