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!