#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
SDK logger implementation.
:date: 2021
:author: Christian Wiche
:contact: cwichel@gmail.com
:license: The MIT License (MIT)
"""
# -------------------------------------
import collections as coll
import logging as log
from .enum import IntEnum
# -->> Tunables <<---------------------
# -->> Definitions <<------------------
# -->> API <<--------------------------
[docs]class Logger(log.Logger):
"""
Logger implementation wrapper.
This class simplifies the logger formatting and level definition for the SDK.
"""
[docs] class Level(IntEnum):
"""
Available logger message levels.
"""
CRITICAL = log.CRITICAL
DEBUG = log.DEBUG
ERROR = log.ERROR
INFO = log.INFO
WARNING = log.WARNING
#: Logger entries format definition
Format = coll.namedtuple("Format", ["style", "pattern"])
#: Default entry format
DEF_FMT = Format(style="{", pattern="{created:.05f}: {name:<8s}: {levelname:<8s}: {module:<20s}: {message:s}")
def __init__(self, name: str = "", level: Level = Level.DEBUG, fmt: Format = DEF_FMT) -> None:
"""
Logger configuration.
Applies the log entries formatting and initial log level.
:param str name: Logger name.
:param int level: Logger initial message name.
:param Logger.Format fmt: Log entries formatting. By default :attr:`FMT_DEFAULT`.
"""
# Initialize logger
super().__init__(name=name, level=level)
# Define formatter
if fmt is None:
fmt = self.DEF_FMT
# Disable logger by default
self.disable()
# Configure format
fmt = log.Formatter(fmt=fmt.pattern, style=fmt.style)
hdl = log.StreamHandler()
hdl.setFormatter(fmt=fmt)
self.addHandler(hdlr=hdl)
[docs] def enable(self) -> None:
"""
Enable logger.
"""
self.disabled = False
[docs] def disable(self) -> None:
"""
Disable logger.
"""
self.disabled = True
[docs] def set_level(self, level: Level = Level.DEBUG) -> None:
"""
Set the log messages level.
:param int level: Log level.
"""
self.setLevel(level=level)
# -->> Instances <<--------------------
#: Embutils internal logger
SDK_LOG = Logger(name="EMBUTILS")
# -->> Export <<-----------------------
__all__ = [
"Logger",
"SDK_LOG",
]