Source code for hypergol.logger

import logging


[docs]class Logger: """Helper class to manage file-based and screen-based logging""" CRITICAL = logging.CRITICAL ERROR = logging.ERROR WARNING = logging.WARNING INFO = logging.INFO DEBUG = logging.DEBUG NOTSET = logging.NOTSET
[docs] def __init__(self, path=None, level=logging.INFO, overWrite=False, enabled=True): """ Parameters ---------- path : str (default=None) Optional path to save logs into a file level : int (default=Logger.INFO) Log level of this logger overWrite : bool (default=False) Indicate if an existing log file should be overwritten or appended """ self.path = path self.level = level self.overWrite = overWrite self.enabled = enabled self._logger = logging.getLogger() self._logger.setLevel(level=self.level) handlers = self._logger.handlers.copy() for handler in handlers: self._logger.removeHandler(handler) handler = logging.StreamHandler(stream=None) handler.setFormatter(logging.Formatter('%(asctime)s - %(message)s')) handler.setLevel(level=self.level) self._logger.addHandler(handler) if self.path is not None: handler = logging.FileHandler(self.path, mode='w' if self.overWrite else 'a') handler.setFormatter(logging.Formatter('%(asctime)s - %(message)s')) handler.setLevel(level=self.level) self._logger.addHandler(handler) self._set_logger_disabled()
def _set_logger_disabled(self): self._logger.disabled = not self.enabled
[docs] def disable(self): self.enabled = False self._set_logger_disabled()
[docs] def enable(self): self.enabled = True self._set_logger_disabled()
def __reduce_ex__(self, protocol): return self.__class__, (self.path, self.level, self.overWrite, self.enabled)
[docs] def log(self, message): """Convenience method for ``Logger.INFO`` level""" self.info(message)
[docs] def critical(self, message): self._logger.critical(message)
[docs] def error(self, message): self._logger.error(message)
[docs] def exception(self, message): self._logger.exception(message)
[docs] def warning(self, message): self._logger.warning(message)
[docs] def info(self, message): self._logger.info(message)
[docs] def debug(self, message): self._logger.debug(message)