@@ -28,11 +28,22 @@ class LevelAwareFormatter(logging.Formatter):
2828 def format (self , record ):
2929 timestamp = self .formatTime (record , "%Y-%m-%d %H:%M:%S" )
3030 if record .levelno >= logging .WARNING :
31- return f"[{ timestamp } ][{ record .levelname } ]: { record .getMessage ()} "
31+ message = f"[{ timestamp } ][{ record .levelname } ]: { record .getMessage ()} "
3232 elif record .levelno == JOBS :
33- return f"[{ timestamp } ][JOBS]: { record .getMessage ()} "
33+ message = f"[{ timestamp } ][JOBS]: { record .getMessage ()} "
3434 else :
35- return f"[{ timestamp } ] { record .getMessage ()} "
35+ message = f"[{ timestamp } ] { record .getMessage ()} "
36+
37+ # Render exception/stack info like the base logging.Formatter does, so
38+ # that a logger.exception(...)/exc_info=... call never silently drops
39+ # the traceback (see #1516).
40+ if record .exc_info and not record .exc_text :
41+ record .exc_text = self .formatException (record .exc_info )
42+ if record .exc_text :
43+ message = f"{ message } \n { record .exc_text } "
44+ if record .stack_info :
45+ message = f"{ message } \n { self .formatStack (record .stack_info )} "
46+ return message
3647
3748
3849# Select output stream: stdout (default, no red highlighting) or stderr
@@ -44,13 +55,7 @@ def format(self, record):
4455logger .setLevel (level = log_level )
4556logger .handlers = [stream_handler ]
4657
47-
48- def excepthook (exc_type , exc_value , exc_traceback ):
49- if issubclass (exc_type , KeyboardInterrupt ):
50- sys .__excepthook__ (exc_type , exc_value , exc_traceback )
51- return
52-
53- logger .error ("Uncaught exception" , exc_info = (exc_type , exc_value , exc_traceback ))
54-
55-
56- sys .excepthook = excepthook
58+ # NOTE: DataJoint intentionally does NOT install a process-wide sys.excepthook.
59+ # Importing a library must not change how *unrelated* uncaught exceptions are
60+ # reported in the host process. Uncaught exceptions are left to Python's default
61+ # handler, which prints the full type/message/traceback to stderr. (See #1516.)
0 commit comments