211124-1731 python logging setup
From a conversation with a colleague at work about #py/logging
Naming loggers after the package / files
Logger names can be used to cleanly output and separate them.
Assuming one has a package with multiple files/subfolders in it, it’s possible to give each one their own logger, like this:
In the main file of the package:
logger = logging.getLogger(__package__)
In all the other files:
logger = logging.getLogger(__name__)
That way paths ./package/my_module.py
lead to loggers named like package.my_module
that map the semantical and the directory structure.
Changing settings of the loggers
In a setup above, one can then easily change the settings of the loggers referring to them by their names.
Configuring logging: Logging HOWTO — Python 3.10.0 documentation
Changing loglevel is easy from code,
if args.debug:
logger.setLevel(logging.DEBUG)
logging.config
allows to change the config from ini-like config files. Two main ways:
logging.config.fileConfig
reads ini-like config files,
logging.config.dictConfig
1 from dictionaries.
Sample .yaml that when converted to dict would change the loglevel of different loggers:
version: 1
loggers:
packageName.mymodule1:
level: DEBUG
packageName.mymodule2:
level: DEBUG
These loggers can even include external ones!