diff --git a/pyproject.toml b/pyproject.toml index 8be5d51..7e86be6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "chromatrace" -version = "0.2.15" +version = "0.2.16" description = "Advanced Python logging with tracing, coloring and FastAPI, Django, and SocketIO integrations" readme = "README.md" authors = [ diff --git a/src/chromatrace/logging_config.py b/src/chromatrace/logging_config.py index 0f2b926..82fdcd9 100644 --- a/src/chromatrace/logging_config.py +++ b/src/chromatrace/logging_config.py @@ -40,12 +40,25 @@ def get_logger(self, name: str) -> logging.Logger: # Add handlers if they don't exist if not logger.handlers: self._setup_handlers(logger) + self._setup_custom_handlers(logger) return logger + def _setup_custom_handlers(self, logger: logging.Logger): + if not hasattr(self.settings, "custom_handlers"): + return + + for handler in self.settings.custom_handlers: + if not isinstance(handler, logging.Handler): + continue + formatter = self._get_formatter( + colored=self.settings.use_console_colored_formatter + ) + self._set_logger_settings(handler, formatter, logger) + def _set_logger_settings( self, - handler: logging.handlers, + handler: logging.Handler, formatter: logging.Formatter, logger: logging.Logger, ): diff --git a/src/chromatrace/logging_settings.py b/src/chromatrace/logging_settings.py index 403d23a..80482f7 100644 --- a/src/chromatrace/logging_settings.py +++ b/src/chromatrace/logging_settings.py @@ -4,7 +4,7 @@ from typing import Literal, Optional import click -from pydantic import BaseModel +from pydantic import BaseModel, Field class LoggingSettings(BaseModel): @@ -26,6 +26,7 @@ class LoggingSettings(BaseModel): use_syslog_colored_formatter: bool = False use_file_colored_formatter: bool = False show_process_id: bool = False + custom_handlers: list = Field(default_factory=list) def __init__(self, **data): super().__init__(**data)