Source code for aamras.util.logger

"""Logging utilities."""

import logging
import sys

class _NiceFormatter(logging.Formatter):
    """winston-esque log formatter"""
    message_format = "%(asctime)s (%(name)s) - %(levelname)s: %(message)s"
    date_format = "%d %b %Y %H:%M:%S"

    def __init__(self):
        super(_NiceFormatter, self).__init__(
            self.message_format, self.date_format)

    def format(self, record):
        if record.levelno < logging.WARNING:
            record.levelname = record.levelname.lower()

        return super(_NiceFormatter, self).format(record)

default_log_formatter = _NiceFormatter()
default_log_handler = logging.StreamHandler(sys.stdout)
default_log_handler.setFormatter(default_log_formatter)
default_level = logging.INFO

_loggers = {}
[docs]def get(name=None) -> logging.Logger: """Create/get a logger. :param name: desired logger name. If None, default logger is returned. """ if name not in _loggers: log = logging.getLogger(name) if name else logging.getLogger() log.setLevel(default_level) if not log.handlers: log.addHandler(default_log_handler) _loggers[name] = log return _loggers[name]
[docs]class LoggerMixin: """Mixin providing :class:`~logging.Logger` instance as "log" attribute.""" _logger: logging.Logger @property def log(self) -> logging.Logger: if not hasattr(self, "_logger") or not self._logger: self._logger = get(self.__class__.__name__) return self._logger