Код: Выделить всё
import re
from logging import DEBUG, Logger, basicConfig, getLogger, Filter, LogRecord
SENSITIVE_PATTERNS = [
(
"email_address",
r"([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+",
),
]
def create_logger(sensitive_patterns: list = None) -> Logger:
basicConfig(level=DEBUG)
logger = getLogger()
sensitive_data_filter = SensitiveDataFilter(sensitive_patterns)
logger.addFilter(sensitive_data_filter)
return logger
class SensitiveDataFilter(Filter):
def __init__(self, patterns=None):
super().__init__()
self.patterns = patterns or []
def filter(self, record: LogRecord) -> bool:
for pattern in self.patterns:
should_redact = re.search(pattern[1], record.msg)
if should_redact:
record.msg = re.sub(pattern[1], f"", record.msg)
return True
logger = create_logger(
sensitive_patterns=SENSITIVE_PATTERNS,
)
test1 = "[email protected]"
test2 = "A"*55
test3 = test2.lower()
logger.info(f"this is test1 : {test1}")
logger.info(f"this is a test3 : {test3}")
logger.info(f"this is a test2 : {test2}")
Однако я также хочу сохранить другие журналы такими, какие они есть, если нет совпадений с редактированием. Это приводит к интересной проблеме. Всякий раз, когда у меня есть большая строка в верхнем регистре, скрипт продолжает выполняться и никогда не заканчивается (я предполагаю, что это какой-то бесконечный цикл?).
Однако, похоже, тот же фрагмент, когда выполняется с пониженным регистром строки, кажется работать. ИНФО: root: это тест3 : аааааааааааааааааааааааааааааааааааааааааааааааааааа
Что мне здесь не хватает?
Я пробовал запустить его в режиме отладки , код, кажется, застрял в одном из внутренних вызовов модуля re, но я не могу понять, почему
Подробнее здесь: https://stackoverflow.com/questions/786 ... itive-info