import logging from collections.abc import Sequence from typing import Any from fansifter_common.logging.utils import get_extra_fields from fansifter_common.utils.dictutil import flatten class ConsoleFormatter(logging.Formatter): default_skip_fields = ("color_message",) def __init__( self, skip_fields: Sequence[str] | None = None, *args: Any, **kwargs: Any ) -> None: super().__init__(*args, **kwargs) self.skip_fields = list(skip_fields or []) self.skip_fields.extend(self.default_skip_fields) def formatMessage(self, record: logging.LogRecord) -> str: message = super().formatMessage(record) extra_info = "" if extra := get_extra_fields(record): extra_info = "; ".join( f"{key}={value}" for key, value in flatten(extra).items() if key not in self.skip_fields ) if extra_info: message = f"{message} :: {extra_info}" return message