Skip to content

Commit 6af9506

Browse files
committed
fix the damn logger coloring; automatically print trace in case of exception
1 parent 1a502ab commit 6af9506

File tree

5 files changed

+42
-23
lines changed

5 files changed

+42
-23
lines changed

compose.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ services:
77
container_name: cheshire_cat_core
88
# Uncomment the two lines below to use your .env (see .env.example)
99
# env_file:
10-
# - .env
10+
# - .env
1111
ports:
1212
- ${CCAT_CORE_PORT:-1865}:80
1313
- 5678:5678 # only for development purposes (take away in production)

core/cat/log.py

+37-16
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import sys
55
import inspect
66
import json
7+
import traceback
78
from pprint import pformat
89
from loguru import logger
910

@@ -36,8 +37,7 @@ class CatLogEngine:
3637
- `ERROR`
3738
- `CRITICAL`
3839
39-
Default to `INFO`.
40-
40+
Default to `CCAT_LOG_LEVEL` env variable (`INFO`).
4141
"""
4242

4343
def __init__(self):
@@ -69,11 +69,18 @@ def default_log(self):
6969
-------
7070
"""
7171

72-
time = "<green>[{time:YYYY-MM-DD HH:mm:ss.SSS}]</green>"
73-
level = "<level>{level: <6}</level>"
74-
origin = "<level>{extra[original_name]}.{extra[original_class]}.{extra[original_caller]}::{extra[original_line]}</level>"
72+
color = {
73+
"DEBUG": "white",
74+
"WARNING": "yellow",
75+
"ERROR": "red",
76+
"CRITICAL": "white",
77+
}.get(self.LOG_LEVEL, "green")
78+
79+
level = f"<level>" + "{level}" + f"</level>"
80+
# time = "<green>[{time:YYYY-MM-DD HH:mm:ss.SSS}]</green>"
81+
# origin = "<level>{extra[original_name]}.{extra[original_class]}.{extra[original_caller]}::{extra[original_line]}</level>"
7582
message = "<level>{message}</level>"
76-
log_format = f"{time} {level} {origin} \n{message}"
83+
log_format = f"{level}\t{message}"
7784

7885
logger.remove()
7986
if self.LOG_LEVEL == "DEBUG":
@@ -177,9 +184,17 @@ def error(self, msg):
177184
"""Logs an ERROR message"""
178185
self.log(msg, level="ERROR")
179186

187+
# Only print the traceback if an exception handler is being executed
188+
if sys.exc_info()[0] is not None:
189+
traceback.print_exc()
190+
180191
def critical(self, msg):
181192
"""Logs a CRITICAL message"""
182193
self.log(msg, level="CRITICAL")
194+
195+
# Only print the traceback if an exception handler is being executed
196+
if sys.exc_info()[0] is not None:
197+
traceback.print_exc()
183198

184199
def log(self, msg, level="DEBUG"):
185200
"""Log a message
@@ -191,15 +206,6 @@ def log(self, msg, level="DEBUG"):
191206
level : str
192207
Logging level."""
193208

194-
(package, module, klass, caller, line) = self.get_caller_info()
195-
196-
custom_logger = logger.bind(
197-
original_name=f"{package}.{module}",
198-
original_line=line,
199-
original_class=klass,
200-
original_caller=caller,
201-
)
202-
203209
# prettify
204210
if type(msg) in [dict, list, str]: # TODO: should be recursive
205211
try:
@@ -210,7 +216,9 @@ def log(self, msg, level="DEBUG"):
210216
msg = pformat(msg)
211217

212218
# actual log
213-
custom_logger.log(level, msg)
219+
lines = msg.split("\n")
220+
for l in lines:
221+
logger.log(level, l)
214222

215223
def welcome(self):
216224
"""Welcome message in the terminal."""
@@ -228,6 +236,19 @@ def welcome(self):
228236
print(f"\n\n{left_margin} Cat REST API: {cat_address}/docs")
229237
print(f"{left_margin} Cat ADMIN: {cat_address}/admin\n\n")
230238

239+
self.log_examples()
240+
241+
242+
def log_examples(self):
243+
244+
"""Log examples for the log engine."""
245+
for c in [self, "Hello there!", [1, 4, "sdfsf"], {"a": 1, "b": {"c": 2}}]:
246+
self.debug(c)
247+
self.info(c)
248+
self.warning(c)
249+
self.error(c)
250+
self.critical(c)
251+
231252

232253
# logger instance
233254
log = CatLogEngine()

core/cat/looking_glass/stray_cat.py

-1
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,6 @@ def classify(
631631
"{sentence}" -> """
632632

633633
response = self.llm(prompt)
634-
log.info(response)
635634

636635
# find the closest match and its score with levenshtein distance
637636
best_label, score = min(

core/cat/looking_glass/white_rabbit.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class WhiteRabbit:
2323
"""
2424

2525
def __init__(self):
26-
log.info("Initializing WhiteRabbit...")
26+
log.debug("Initializing WhiteRabbit...")
2727

2828
# Where the jobs are stored. We can also use an external db to have persistence
2929
jobstores = {"default": MemoryJobStore()}
@@ -50,12 +50,12 @@ def __init__(self):
5050
self._job_ended_listener, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR
5151
)
5252

53-
log.info("WhiteRabbit: Starting scheduler")
53+
log.debug("WhiteRabbit: Starting scheduler")
5454

5555
# Start the scheduler
5656
try:
5757
self.scheduler.start()
58-
log.info("WhiteRabbit: Scheduler started")
58+
log.debug("WhiteRabbit: Scheduler started")
5959
except Exception as e:
6060
log.error("WhiteRabbit: Error during scheduler start: ", e)
6161

core/cat/mad_hatter/mad_hatter.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,7 @@ def find_plugins(self):
101101
f"{self.plugins_folder}*/"
102102
)
103103

104-
log.info("ACTIVE PLUGINS:")
105-
log.info(self.active_plugins)
104+
log.info(f"Active Plugins: {self.active_plugins}")
106105

107106
# discover plugins, folder by folder
108107
for folder in all_plugin_folders:

0 commit comments

Comments
 (0)