Created
January 8, 2020 15:17
-
-
Save dangunter/425dc9a2b22bb0d41cc838731439bbf1 to your computer and use it in GitHub Desktop.
Logging adapter/filter example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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