Skip to content

Commit a163efd

Browse files
committed
feat(logging): add support for custom logging handlers
* Introduced `custom_handlers` field in `LoggingSettings` to allow users to specify custom logging handlers. * Updated `_setup_custom_handlers` method in `LoggingConfig` to configure these handlers if provided.
1 parent 7e85fe7 commit a163efd

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

src/chromatrace/logging_config.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,25 @@ def get_logger(self, name: str) -> logging.Logger:
4040
# Add handlers if they don't exist
4141
if not logger.handlers:
4242
self._setup_handlers(logger)
43+
self._setup_custom_handlers(logger)
4344

4445
return logger
4546

47+
def _setup_custom_handlers(self, logger: logging.Logger):
48+
if not hasattr(self.settings, "custom_handlers"):
49+
return
50+
51+
for handler in self.settings.custom_handlers:
52+
if not isinstance(handler, logging.Handler):
53+
continue
54+
formatter = self._get_formatter(
55+
colored=self.settings.use_console_colored_formatter
56+
)
57+
self._set_logger_settings(handler, formatter, logger)
58+
4659
def _set_logger_settings(
4760
self,
48-
handler: logging.handlers,
61+
handler: logging.Handler,
4962
formatter: logging.Formatter,
5063
logger: logging.Logger,
5164
):

src/chromatrace/logging_settings.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from typing import Literal, Optional
55

66
import click
7-
from pydantic import BaseModel
7+
from pydantic import BaseModel, Field
88

99

1010
class LoggingSettings(BaseModel):
@@ -26,6 +26,7 @@ class LoggingSettings(BaseModel):
2626
use_syslog_colored_formatter: bool = False
2727
use_file_colored_formatter: bool = False
2828
show_process_id: bool = False
29+
custom_handlers: list = Field(default_factory=list)
2930

3031
def __init__(self, **data):
3132
super().__init__(**data)

0 commit comments

Comments
 (0)