Skip to content

Instantly share code, notes, and snippets.

@fredrikaverpil
Created December 6, 2021 07:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fredrikaverpil/79ab394b449f29685c89c736c1ac6d67 to your computer and use it in GitHub Desktop.
Save fredrikaverpil/79ab394b449f29685c89c736c1ac6d67 to your computer and use it in GitHub Desktop.
Filter out sensitive information from logs
import logging
import re
class RedactingFilter(logging.Filter):
def __init__(self, patterns):
super(RedactingFilter, self).__init__()
self._patterns = patterns
def filter(self, record):
record.msg = self.redact(record.msg)
if isinstance(record.args, dict):
for k in record.args.keys():
record.args[k] = self.redact(record.args[k])
else:
record.args = tuple(self.redact(arg) for arg in record.args)
return True
def redact(self, msg):
for pattern in self._patterns:
msg = re.sub(pattern, "[redacted]", msg)
return msg
logger = logging.getLogger()
stream_handler = logging.StreamHandler()
stream_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
redacting_filter = RedactingFilter(
patterns=[
re.compile(r"(?i)\bsecret\b"),
re.compile(r"(?i)\bpassword\b"),
]
)
stream_handler.setFormatter(stream_formatter)
stream_handler.addFilter(redacting_filter)
logger.setLevel(logging.DEBUG)
logger.addHandler(stream_handler)
logger.info("hello, this is a sEcRet")
logger.info("hello, this is a secret password")
# Output
# 2021-12-06 08:32:25,448 - root - INFO - hello, this is a [redacted]
# 2021-12-06 08:32:25,449 - root - INFO - hello, this is a [redacted] [redacted]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment