Skip to content

Commit a877a80

Browse files
Fixed ANSI color codes per review feedback
Updated WARNING and ERROR codes to use the correct foreground colors. Added Wikipedia reference comment above COLORS.
1 parent cfaab88 commit a877a80

File tree

1 file changed

+42
-3
lines changed

1 file changed

+42
-3
lines changed

scripts/shared.py

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Standard library
22
import logging
33
import os
4+
import sys
45
from datetime import datetime, timezone
56

67
# Third-party
@@ -128,12 +129,50 @@ def paths_update(logger, paths, old_quarter, new_quarter):
128129
return paths
129130

130131

132+
class ColoredFormatter(logging.Formatter):
133+
"""Adds colors to log messages."""
134+
# https://en.wikipedia.org/wiki/ANSI_escape_code#3-bit_and_4-bit
135+
COLORS = {
136+
logging.DEBUG: "\033[90m", # bright black
137+
logging.INFO: "\033[37m", # white
138+
logging.WARNING: "\033[93m", # bright yellow
139+
logging.ERROR: "\033[91m", # bright red
140+
logging.CRITICAL: "\033[31m", # red
141+
}
142+
RESET = "\033[0m"
143+
144+
def format(self, record):
145+
message = super().format(record)
146+
color = self.COLORS.get(record.levelno, "")
147+
if color:
148+
return f"{color}{message}{self.RESET}"
149+
return message
150+
151+
131152
def setup(current_file):
132153
# Set up logging
133-
logging.basicConfig(
134-
level=logging.INFO,
135-
format="%(asctime)s - %(levelname)s - %(module)s - %(message)s",
154+
root = logging.getLogger()
155+
root.handlers.clear()
156+
root.setLevel(logging.INFO)
157+
158+
formatter = ColoredFormatter(
159+
"%(asctime)s - %(levelname)s - %(module)s - %(message)s"
136160
)
161+
162+
# Info/warning to stdout
163+
stdout_handler = logging.StreamHandler(sys.stdout)
164+
stdout_handler.setLevel(logging.DEBUG)
165+
stdout_handler.setFormatter(formatter)
166+
stdout_handler.addFilter(lambda r: r.levelno < logging.ERROR)
167+
168+
# Errors to stderr
169+
stderr_handler = logging.StreamHandler(sys.stderr)
170+
stderr_handler.setLevel(logging.ERROR)
171+
stderr_handler.setFormatter(formatter)
172+
173+
root.addHandler(stdout_handler)
174+
root.addHandler(stderr_handler)
175+
137176
logger = logging.getLogger(__name__)
138177

139178
# Datetime

0 commit comments

Comments
 (0)