4
4
import sys
5
5
import inspect
6
6
import json
7
+ import traceback
7
8
from pprint import pformat
8
9
from loguru import logger
9
10
@@ -36,8 +37,7 @@ class CatLogEngine:
36
37
- `ERROR`
37
38
- `CRITICAL`
38
39
39
- Default to `INFO`.
40
-
40
+ Default to `CCAT_LOG_LEVEL` env variable (`INFO`).
41
41
"""
42
42
43
43
def __init__ (self ):
@@ -69,11 +69,18 @@ def default_log(self):
69
69
-------
70
70
"""
71
71
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>"
75
82
message = "<level>{message}</level>"
76
- log_format = f"{ time } { level } { origin } \n { message } "
83
+ log_format = f"{ level } \t { message } "
77
84
78
85
logger .remove ()
79
86
if self .LOG_LEVEL == "DEBUG" :
@@ -177,9 +184,17 @@ def error(self, msg):
177
184
"""Logs an ERROR message"""
178
185
self .log (msg , level = "ERROR" )
179
186
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
+
180
191
def critical (self , msg ):
181
192
"""Logs a CRITICAL message"""
182
193
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 ()
183
198
184
199
def log (self , msg , level = "DEBUG" ):
185
200
"""Log a message
@@ -191,15 +206,6 @@ def log(self, msg, level="DEBUG"):
191
206
level : str
192
207
Logging level."""
193
208
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
-
203
209
# prettify
204
210
if type (msg ) in [dict , list , str ]: # TODO: should be recursive
205
211
try :
@@ -210,7 +216,9 @@ def log(self, msg, level="DEBUG"):
210
216
msg = pformat (msg )
211
217
212
218
# actual log
213
- custom_logger .log (level , msg )
219
+ lines = msg .split ("\n " )
220
+ for l in lines :
221
+ logger .log (level , l )
214
222
215
223
def welcome (self ):
216
224
"""Welcome message in the terminal."""
@@ -228,6 +236,19 @@ def welcome(self):
228
236
print (f"\n \n { left_margin } Cat REST API: { cat_address } /docs" )
229
237
print (f"{ left_margin } Cat ADMIN: { cat_address } /admin\n \n " )
230
238
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
+
231
252
232
253
# logger instance
233
254
log = CatLogEngine ()
0 commit comments