Source code for dataservice.logs

"""Logging module."""

from logging.config import dictConfig
from typing import Literal

from pydantic import BaseModel, Field

HandlerType = Literal["stdout", "file"]
LoggingLevel = Literal["DEBUG", "INFO", "WARNING", "ERROR"]


class HandlerDict(BaseModel):
    class_: str = Field(alias="class", default="logging.StreamHandler")
    stream: str = "ext://sys.stdout"
    formatter: str = "simple"


class LoggerDict(BaseModel):
    handlers: list[HandlerType] = ["stdout"]
    level: LoggingLevel = "DEBUG"
    propagate: bool = False


class LoggingConfigDict(BaseModel):
    version: int = 1
    disable_existing_loggers: bool = False
    filters: dict[str, dict] = {}
    formatters: dict[str, dict] = {
        "simple": {"format": "%(asctime)s :: %(name)s :: %(levelname)s :: %(message)s"},
    }
    handlers: dict[str, HandlerDict] = {"stdout": HandlerDict()}
    loggers: dict[str, LoggerDict] = {"dataservice": LoggerDict()}


[docs] def setup_logging(logger_name: str | None = None, level: LoggingLevel = "DEBUG"): """Setup logging configuration. :param logger_name: The logger name. :param level: The logging level. """ loggers = {"dataservice": LoggerDict(level=level)} if logger_name is not None: loggers.update({logger_name: LoggerDict(level=level)}) dict_config = LoggingConfigDict(loggers=loggers).model_dump(by_alias=True) dictConfig(dict_config)