selective logger disable/enable
Peter Otten
__peter__ at web.de
Tue Jan 23 04:04:18 EST 2007
Gary Jefferson wrote:
> Suppose I have 3 modules that belong to a project, 'A', 'A.a' and 'B',
> and each module has its own logger, created with:
>
> module1logger = logging.getLogger('project.A')
>
> and
>
> module2logger = logging.getLogger('project.A.a')
>
> and
>
> module3logger = logging.getLogger('project.B')
>
>
> And I want to selectively enable/disable these, per module (for
> example, I only want logging from A and A.a, or just from B, etc). It
> seems like logging.Filter is supposed to let me do this, but I can't
> see how to apply it globally. Is there really no other way that to add
> a addFilter(filter) call to each of these loggers individually?
>
> logging.basicConfig gets inherited by all loggers, but it doesn't seem
> capable of giving a Filter to all loggers. Is there any way to do this?
An alternative approach might be to set the 'propagate' flag:
import logging
def warn_all(loggers, message):
for lgr in loggers:
lgr.warn(message)
logging.basicConfig()
root = logging.getLogger()
root.manager.emittedNoHandlerWarning = True
loggers = [logging.getLogger(name) for name in """
alpha
alpha.1
alpha.2
alpha.2.1
alpha.2.2
alpha.2.2.1
beta
beta.1
beta.2
""".split()]
warn_all(loggers, "all on")
print "---"
logging.getLogger("alpha").propagate = False
warn_all(loggers, "alpha off")
logging.getLogger("alpha").propagate = True
print "---"
logging.getLogger("alpha.2").propagate = False
warn_all(loggers, "alpha.2 off")
Peter
More information about the Python-list
mailing list