Skip to content

Commit 24b7803

Browse files
authored
Merge pull request #210 from SaurabhCodesAI/main
Fix logging output routing and added colorized logging (#205, #206)
2 parents cfaab88 + a877a80 commit 24b7803

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)