MCPcopy Index your code
hub / github.com/CodeClash-ai/CodeClash / RichFormatter

Class RichFormatter

codeclash/utils/log.py:16–65  ·  view source on GitHub ↗

Custom formatter that uses Rich for colorized output.

Source from the content-addressed store, hash-verified

14
15
16class RichFormatter(logging.Formatter):
17 """Custom formatter that uses Rich for colorized output."""
18
19 def __init__(self, console: Console | None = None, emoji: str = ""):
20 super().__init__()
21 self.console = console or Console()
22 self.emoji = emoji + " " if emoji and not emoji.endswith(" ") else emoji
23 self.level_colors = {
24 logging.DEBUG: "dim cyan",
25 logging.INFO: "green",
26 logging.WARNING: "yellow",
27 logging.ERROR: "red",
28 logging.CRITICAL: "bold red",
29 }
30
31 def format(self, record: logging.LogRecord) -> str:
32 level_color = self.level_colors.get(record.levelno, "white")
33 level_name = record.levelname.replace("WARNING", "WARN")
34
35 # Calculate the prefix length for indentation
36 prefix = f"{self.emoji}{level_name} [{record.name}] "
37 indent = " " * len(prefix)
38
39 text = Text()
40 text.append(self.emoji, style="white")
41 text.append(f"{level_name} ", style=level_color)
42 text.append(f"[{record.name}] ", style="dim")
43
44 # Handle multiline messages by indenting continuation lines
45 message = record.getMessage()
46 lines = message.split("\n")
47 text.append(lines[0], style="white")
48
49 for line in lines[1:]:
50 text.append("\n")
51 text.append(indent, style="dim")
52 text.append(line, style="white")
53
54 if record.exc_info:
55 text.append("\n")
56 exception_lines = self.formatException(record.exc_info).split("\n")
57 for i, exc_line in enumerate(exception_lines):
58 if i > 0:
59 text.append("\n")
60 text.append(indent, style="dim")
61 text.append(exc_line, style="red")
62
63 with self.console.capture() as capture:
64 self.console.print(text)
65 return capture.get().rstrip()
66
67
68def add_file_handler(logger: logging.Logger, log_path: Path) -> logging.FileHandler:

Callers 1

get_loggerFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected