Source code for jsktoolbox.basetool.logs

# -*- coding: utf-8 -*-
"""
Author:  Jacek 'Szumak' Kotlarski --<szumak@virthost.pl>
Created: 2024-01-15

Purpose: Provide foundational mixins for the logging subsystem.

Defines base mixins for logger queues, engine metadata, and formatting
behaviour leveraged by higher-level logging utilities.
"""

from typing import Optional, List, Any

from ..logstool import LogKeys
from ..logstool import LoggerQueue

from .data import BData
from ..attribtool import NoDynamicAttributes


[docs] class BLoggerQueue(BData): """Base mixin that exposes a lazily-created logging queue.""" @property def logs_queue(self) -> Optional[LoggerQueue]: """Return the configured logging queue instance. ### Returns: [Optional[LoggerQueue]] - Logger queue or None when not set. """ return self._get_data( key=LogKeys.QUEUE, default_value=None, ) @logs_queue.setter def logs_queue(self, obj: Optional[LoggerQueue]) -> None: """Assign the logger queue instance. ### Arguments: * obj: Optional[LoggerQueue] - Queue instance or None. """ self._set_data( key=LogKeys.QUEUE, value=obj, set_default_type=Optional[LoggerQueue] )
[docs] class BLoggerEngine(BData): """Base mixin for logger engine metadata.""" @property def name(self) -> Optional[str]: """Return the configured application name. ### Returns: [Optional[str]] - Application name value or None. """ return self._get_data( key=LogKeys.NAME, default_value=None, ) @name.setter def name(self, value: str) -> None: """Assign the application name. ### Arguments: * value: str - Application name string. """ self._set_data(key=LogKeys.NAME, value=value, set_default_type=Optional[str])
[docs] class BLogFormatter(NoDynamicAttributes): """Base mixin for log formatters leveraging simple templates.""" __blf_template: Optional[str] = None __blf_forms: Optional[List] = None
[docs] def format(self, message: str, name: Optional[str] = None) -> str: """Render a log message based on the configured forms list. ### Arguments: * message: str - Log string to include in the output. * name: Optional[str] - Optional application name. ### Returns: [str] - Formatted log payload. """ out: str = "" for item in self._forms_: if callable(item): out += f"{item()} " elif isinstance(item, str): if name is None: if item.find("name") == -1: out += item.format(message=f"{message}") else: if item.find("name") > 0: out += item.format( name=f"{name}", message=f"{message}", ) return out
@property def _forms_(self) -> List: """Return the list of formatter components. ### Returns: [List] - Current forms definition list. """ if self.__blf_forms is None: self.__blf_forms = [] return self.__blf_forms @_forms_.setter def _forms_(self, item: Any) -> None: """Append a formatter component to the forms list. ### Arguments: * item: Any - Callable or string template. """ self._forms_.append(item)
# #[EOF]#######################################################################