Skip to content

Commit 53294f3

Browse files
authored
Merge pull request #726 from benjaminysmith/even_more_logging
Add exception handling support to structured logger
2 parents 9097176 + 82c0b0b commit 53294f3

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

_delphi_utils_python/delphi_utils/logger.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,26 @@
11
"""Structured logger utility for creating JSON logs in Delphi pipelines."""
22
import logging
3+
import sys
4+
import threading
35
import structlog
46

5-
def get_structured_logger(name = __name__, filename = None):
7+
8+
def handle_exceptions(logger):
9+
"""Handle exceptions using the provided logger."""
10+
def exception_handler(etype, value, traceback):
11+
logger.exception("Top-level exception occurred",
12+
exc_info=(etype, value, traceback))
13+
14+
def multithread_exception_handler(args):
15+
exception_handler(args.exc_type, args.exc_value, args.exc_traceback)
16+
17+
sys.excepthook = exception_handler
18+
threading.excepthook = multithread_exception_handler
19+
20+
21+
def get_structured_logger(name=__name__,
22+
filename=None,
23+
log_exceptions=True):
624
"""Create a new structlog logger.
725
826
Use the logger returned from this in indicator code using the standard
@@ -66,4 +84,9 @@ def get_structured_logger(name = __name__, filename = None):
6684
cache_logger_on_first_use=True,
6785
)
6886

69-
return structlog.get_logger(name)
87+
logger = structlog.get_logger(name)
88+
89+
if log_exceptions:
90+
handle_exceptions(logger)
91+
92+
return logger

0 commit comments

Comments
 (0)