Skip to content

Instantly share code, notes, and snippets.

@dangunter
Created January 8, 2020 15:17
Show Gist options
  • Save dangunter/425dc9a2b22bb0d41cc838731439bbf1 to your computer and use it in GitHub Desktop.
Save dangunter/425dc9a2b22bb0d41cc838731439bbf1 to your computer and use it in GitHub Desktop.
Logging adapter/filter example
from logging import getLogger, Filter, LoggerAdapter, StreamHandler, Formatter, INFO, ERROR, DEBUG
logger = getLogger("test")
class IdaesModFilter(Filter):
"""Filter that keeps a list of allowed 'modules' in an attribute.
"""
def __init__(self, modules):
self.modules = modules # list of modules to allow
def filter(self, record):
try:
if record.idaesmod in self.modules:
return 1
except AttributeError:
return 0
return 0
idaes_filter = IdaesModFilter(["flowsheet"])
h = StreamHandler()
f = Formatter("%(asctime)s [%(levelname)s] %(idaesmod)s :: %(msg)s") # note "idaesmod"
h.setFormatter(f)
h.addFilter(idaes_filter) # add the filter to the handler
logger.addHandler(h) # add handler to logger
# Create logger for flowsheets
fslogbase = getLogger("test.flowsheet")
fslog = LoggerAdapter(fslogbase, {"idaesmod": "flowsheet"}) # puts "idaesmod" attr in log record
fslog.setLevel(ERROR)
fslog.info("hello") # does not pass due to level
fslog.error("hello") # passes
ulogbase = getLogger("test.unit")
ulog = LoggerAdapter(ulogbase, {"idaesmod": "unit"}) # logger for 'unit'
ulog.error("hello") # does not pass due to module unit not in filter modules
# Change filter to only pass "unit" modules
idaes_filter.modules = ["unit"]
fslog.error("hello") # does not pass due to module flowsheet not in filter modules
ulog.error("hello") # passes
ulog.info("hello") # does not pass due to level (still)
ulog.setLevel(INFO)
ulog.info("hello") # now it passes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment