Beispiel #1
0
def init_cli(logger_):
    paths = [
        'data/working/logs',
        'data/working/models',
    ]
    for p in paths:
        Path(p).mkdir(parents=True, exist_ok=True)

    handler = StreamHandler()
    handler.setLevel(INFO)
    handler.setFormatter(Formatter(LOGFORMAT))
    logger_.addHandler(handler)

    suffix_name = Path(sys.argv[0]).name
    if len(sys.argv) > 1:
        suffix_name += '_' + sys.argv[1]
    dt = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')[2:]

    fn = f'data/working/logs/{dt}_{suffix_name}.log'
    fh_handler = FileHandler(fn)
    fh_handler.setFormatter(Formatter(LOGFORMAT))
    logger_.addHandler(fh_handler)
    logger_.info(f'Logfile: {fn}')
    logger_.info(f'Command: {" ".join(sys.argv)}')
    fh_handler.flush()
Beispiel #2
0
class SystemLogger(Component):

    FORMAT_DEFAULT = "%(levelname)s : %(asctime)s : %(message)s"
    FILE_NAME_DEFAULT = "systemlog"
    FILE_EXTENSION_DEFAULT = "log"

    def __init__(self,
                 lname: Optional[str] = None,
                 level: Union[int, str] = logging.INFO,
                 name: Optional[str] = None) -> None:

        super().__init__(name=name)
        self._logger: Logger = logging.getLogger(name=lname)
        self._logger.setLevel(level)
        self.fhandler: Optional[FileHandler] = None

    def setLevel(self, level):
        self._logger.setLevel(level)

    def debug(self, msg, *args, **kwargs):
        self._logger.debug(msg, *args, **kwargs)

    def info(self, msg, *args, **kwargs):
        self._logger.info(msg, *args, **kwargs)

    def warning(self, msg, *args, **kwargs):
        self._logger.warning(msg, *args, **kwargs)

    def warn(self, msg, *args, **kwargs):
        self._logger.warn(msg, *args, **kwargs)

    def error(self, msg, *args, **kwargs):
        self._logger.error(msg, *args, **kwargs)

    def exception(self, msg, *args, exc_info: bool = True, **kwargs):
        self._logger.exception(msg, *args, exc_info=exc_info, **kwargs)

    def critical(self, msg, *args, **kwargs):
        self._logger.critical(msg, *args, **kwargs)

    def log(self, level, msg, *args, **kwargs):
        self._logger.log(level, msg, *args, **kwargs)

    def findCaller(self, stack_info: bool = False):
        return self._logger.findCaller(stack_info)

    def makeRecord(self,
                   name,
                   level,
                   fn,
                   lno,
                   msg,
                   args,
                   exc_info,
                   func=None,
                   extra=None,
                   sinfo=None) -> LogRecord:
        return self._logger.makeRecord(name,
                                       level,
                                       fn,
                                       lno,
                                       msg,
                                       args,
                                       exc_info,
                                       func=func,
                                       extra=extra,
                                       sinfo=sinfo)

    def handle(self, record):
        self._logger.handle(record)

    def addHandler(self, hdlr):
        self._logger.addHandler(hdlr)

    def removeHandler(self, hdlr):
        self._logger.removeHandler(hdlr)

    def hasHandlers(self) -> bool:
        return self._logger.hasHandlers()

    def getEffectiveLevel(self) -> int:
        return self._logger.getEffectiveLevel()

    def isEnabledFor(self, level) -> bool:
        return self._logger.isEnabledFor(level)

    def getChild(self, suffix) -> Logger:
        return self._logger.getChild(suffix)

    def setFileHandler(self,
                       filename: Optional[str] = None,
                       level: int = logging.INFO,
                       fmt: Optional[str] = None,
                       mode: str = "a",
                       encoding: Optional[str] = None,
                       delay: bool = True):

        if filename is None:
            filename = get_time_stamp(self.FILE_NAME_DEFAULT,
                                      self.FILE_EXTENSION_DEFAULT)

        if fmt is not None:
            formatter = Formatter(fmt)
        else:
            formatter = Formatter(self.FORMAT_DEFAULT)

        self.fhandler = FileHandler(filename,
                                    mode=mode,
                                    encoding=encoding,
                                    delay=delay)
        self.fhandler.setLevel(level)
        self.fhandler.setFormatter(formatter)
        self._logger.addHandler(self.fhandler)

    def close(self):
        if self.fhandler is not None:
            self.fhandler.flush()
            self.fhandler.close()