Last active
September 2, 2016 07:29
-
-
Save imayhaveborkedit/2ff86f6427824e948e9f412ffdf9141b to your computer and use it in GitHub Desktop.
Dynamagically create logger levels and associated logging function
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
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