Skip to content

Instantly share code, notes, and snippets.

@imayhaveborkedit
Last active September 2, 2016 07:29
Show Gist options
  • Save imayhaveborkedit/2ff86f6427824e948e9f412ffdf9141b to your computer and use it in GitHub Desktop.
Save imayhaveborkedit/2ff86f6427824e948e9f412ffdf9141b to your computer and use it in GitHub Desktop.
Dynamagically create logger levels and associated logging function
import logging
_func_prototype = "def {logger_func_name}(self, message, *args, **kwargs):\n" \
" if self.isEnabledFor({levelname}):\n" \
" self._log({levelname}, message, args, **kwargs)"
def _add_logger_level(levelname, level, *, func_name = None):
"""
:type levelname: str
The reference name of the level, e.g. DEBUG, WARNING, etc
:type level: int
Numeric logging level
:type func_name: str
The name of the logger function to log to a level, e.g. "info" for logger.info(...)
"""
func_name = func_name or levelname.lower()
setattr(logging, levelname, level)
logging.addLevelName(level, levelname)
exec(_func_prototype.format(logger_func_name=func_name, levelname=levelname), logging.__dict__, locals())
setattr(logging.Logger, func_name, eval(func_name))
_add_logger_level('EVERYTHING', 1)
_add_logger_level('NOISY', 4, func_name='noise')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment