1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| import re
import logging
class SensitiveDataFilter(logging.Filter):
"""過濾日誌中的敏感資料"""
PATTERNS = [
(r'\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b', '[CREDIT_CARD]'),
(r'\b[A-Z]\d{9}\b', '[ID_NUMBER]'),
(r'password["\']?\s*[:=]\s*["\']?[^"\'&\s]+', 'password=[REDACTED]'),
(r'api[_-]?key["\']?\s*[:=]\s*["\']?[\w-]+', 'api_key=[REDACTED]'),
(r'\b[\w.-]+@[\w.-]+\.\w+\b', '[EMAIL]'),
]
def filter(self, record):
message = record.getMessage()
for pattern, replacement in self.PATTERNS:
message = re.sub(pattern, replacement, message, flags=re.IGNORECASE)
record.msg = message
record.args = ()
return True
# 設定 logger
logger = logging.getLogger(__name__)
logger.addFilter(SensitiveDataFilter())
# 測試
logger.info("用戶信用卡: 4111-1111-1111-1111") # 輸出: 用戶信用卡: [CREDIT_CARD]
logger.info("password=secret123") # 輸出: password=[REDACTED]
|