From 7c02e2fc4f488616259e2ecf9dcfabfd4ee7eefa Mon Sep 17 00:00:00 2001 From: SAY-5 Date: Sun, 10 May 2026 02:27:01 -0700 Subject: [PATCH] Fix RichHandler console highlighter fallback --- rich/logging.py | 6 +++++- tests/test_logging.py | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/rich/logging.py b/rich/logging.py index e572f078c4..913e0c4473 100644 --- a/rich/logging.py +++ b/rich/logging.py @@ -96,6 +96,7 @@ def __init__( ) -> None: super().__init__(level=level) self.console = console or get_console() + self._highlighter = highlighter self.highlighter = highlighter or self.HIGHLIGHTER_CLASS() self._log_render = LogRender( show_time=show_time, @@ -200,7 +201,10 @@ def render_message(self, record: LogRecord, message: str) -> ConsoleRenderable: use_markup = getattr(record, "markup", self.markup) message_text = Text.from_markup(message) if use_markup else Text(message) - highlighter = getattr(record, "highlighter", self.highlighter) + if "highlighter" in record.__dict__: + highlighter = record.highlighter + else: + highlighter = self._highlighter or self.console.highlighter if highlighter: message_text = highlighter(message_text) diff --git a/tests/test_logging.py b/tests/test_logging.py index 388dcc1088..34b7c33f3c 100644 --- a/tests/test_logging.py +++ b/tests/test_logging.py @@ -1,11 +1,13 @@ import io import os import logging +import re from typing import Optional import pytest from rich.console import Console +from rich.highlighter import ReprHighlighter from rich.logging import RichHandler handler = RichHandler( @@ -160,3 +162,23 @@ def test_markup_and_highlight(): render_plain = handler.console.file.getvalue() assert "FORMATTER" in render_plain assert log_message in render_plain + + +def test_handler_uses_console_highlighter_when_not_overridden(): + class HashHighlighter(ReprHighlighter): + highlights = [ + *ReprHighlighter.highlights, + re.compile(r"\b(?PFOO)\b"), + ] + + console = Console(highlighter=HashHighlighter()) + handler = RichHandler(console=console) + record = logging.LogRecord("rich", logging.INFO, __file__, 1, "message", (), None) + + rendered = handler.render_message(record, "A git hash FOO") + + assert rendered.plain == "A git hash FOO" + assert len(rendered.spans) == 1 + assert rendered.spans[0].start == 11 + assert rendered.spans[0].end == 14 + assert rendered.spans[0].style == "repr.git_hash"