import logging import re from config import Config # 敏感信息脱敏模式 SENSITIVE_PATTERNS = [ (re.compile(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'), '[EMAIL]'), (re.compile(r'passw ord|password|pwd', re.I), '[PASSWORD]'), (re.compile(r'\/[\/\w\-\.]+'), '[PATH]'), # 简单路径脱敏 ] def sanitize(text: str) -> str: """脱敏日志中的敏感信息""" if not isinstance(text, str): text = str(text) for pattern, repl in SENSITIVE_PATTERNS: text = pattern.sub(repl, text) return text class SanitizeLogger: def __init__(self, name, log_file="conversion.log"): self.logger = logging.getLogger(name) self.logger.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 文件处理器 fh = logging.FileHandler(log_file, encoding='utf-8') fh.setFormatter(formatter) self.logger.addHandler(fh) # 控制台处理器(可选) ch = logging.StreamHandler() ch.setFormatter(formatter) self.logger.addHandler(ch) def info(self, msg, *args, **kwargs): self.logger.info(sanitize(msg), *args, **kwargs) def error(self, msg, *args, **kwargs): self.logger.error(sanitize(msg), *args, **kwargs) def warning(self, msg, *args, **kwargs): self.logger.warning(sanitize(msg), *args, **kwargs) def debug(self, msg, *args, **kwargs): self.logger.debug(sanitize(msg), *args, **kwargs) logger = SanitizeLogger("MailConverter")