Source code for nabu.resources.logger

import logging
import logging.config


[docs] class Logger(object): def __init__(self, loggername, level="DEBUG", logfile="logger.log", console=True): """ Configure a Logger object. Parameters ----------- loggername: str Logger name. level: str, optional Logging level. Can be "debug", "info", "warning", "error", "critical". Default is "debug". logfile: str, optional File where the logs are written. If set to None, the logs are not written in a file. Default is "logger.log". console: bool, optional If set to True, the logs are (also) written in stdout/stderr. Default is True. """ self.loggername = loggername self.level = level self.logfile = logfile self.console = console self._configure_logger() def _configure_logger(self): conf = self._get_default_config_dict() for handler in conf["handlers"].keys(): conf["handlers"][handler]["level"] = self.level.upper() conf["loggers"][self.loggername]["level"] = self.level.upper() if not (self.console): conf["loggers"][self.loggername]["handlers"].remove("console") self.config = conf logging.config.dictConfig(conf) self.logger = logging.getLogger(self.loggername) def _get_default_config_dict(self): conf = { "version": 1, "formatters": { "default": {"format": "%(asctime)s - %(levelname)s - %(message)s", "datefmt": "%d-%m-%Y %H:%M:%S"}, "console": {"format": "%(message)s"}, }, "handlers": { "console": { "level": "DEBUG", "class": "logging.StreamHandler", "formatter": "console", "stream": "ext://sys.stdout", }, "file": { "level": "DEBUG", "class": "logging.FileHandler", "formatter": "default", "filename": self.logfile, }, }, "loggers": { self.loggername: { "level": "DEBUG", "handlers": ["console", "file"], # This logger inherits from root logger - dont propagate ! "propagate": False, } }, "disable_existing_loggers": False, } return conf
[docs] def info(self, msg): return self.logger.info(msg)
[docs] def debug(self, msg): return self.logger.debug(msg)
[docs] def warning(self, msg): return self.logger.warning(msg)
warn = warning
[docs] def error(self, msg): return self.logger.error(msg)
[docs] def fatal(self, msg): return self.logger.fatal(msg)
[docs] def critical(self, msg): return self.logger.critical(msg)
[docs] def LoggerOrPrint(logger): """ Logger that is either a "true" logger object, or a fall-back to "print". """ if logger is None: return PrinterLogger() return logger
[docs] class PrinterLogger(object): def __init__(self): methods = [ "debug", "warn", "warning", "info", "error", "fatal", "critical", ] for method in methods: self.__setattr__(method, print)
LogLevel = { "notset": logging.NOTSET, "debug": logging.DEBUG, "info": logging.INFO, "warn": logging.WARN, "warning": logging.WARNING, "error": logging.ERROR, "critical": logging.CRITICAL, "fatal": logging.FATAL, }