Skip to content

Commit c57e6f6

Browse files
committed
Add support for exceptions
1 parent 83f6252 commit c57e6f6

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

json_logging/__init__.py

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import logging
44
import uuid
55
from datetime import datetime
6+
import traceback
67

78
from json_logging import util
89
from json_logging.framework_base import RequestAdapter, ResponseAdapter, AppRequestInstrumentationConfigurator, \
@@ -225,6 +226,21 @@ class JSONLogFormatter(logging.Formatter):
225226
Formatter for non-web application log
226227
"""
227228

229+
def get_exc_fields(self, record):
230+
if record.exc_info:
231+
exc_info = self.format_exception(record.exc_info)
232+
else:
233+
exc_info = record.exc_text
234+
return {
235+
'exc_info': exc_info,
236+
'filename': record.filename,
237+
}
238+
239+
@classmethod
240+
def format_exception(cls, exc_info):
241+
242+
return ''.join(traceback.format_exception(*exc_info)) if exc_info else ''
243+
228244
def format(self, record):
229245
utcnow = datetime.utcnow()
230246
json_log_object = {"type": "log",
@@ -237,13 +253,15 @@ def format(self, record):
237253
"thread": record.threadName,
238254
"level": record.levelname,
239255
"module": record.module,
240-
"line_no": record.lineno,
241-
"msg": record.getMessage()
256+
"msg": record.getMessage(),
242257
}
243258

244259
if hasattr(record, 'props'):
245260
json_log_object.update(record.props)
246261

262+
if record.exc_info or record.exc_text:
263+
json_log_object.update(self.get_exc_fields(record))
264+
247265
return JSON_SERIALIZER(json_log_object)
248266

249267

@@ -252,6 +270,21 @@ class JSONLogWebFormatter(logging.Formatter):
252270
Formatter for web application log
253271
"""
254272

273+
def get_exc_fields(self, record):
274+
if record.exc_info:
275+
exc_info = self.format_exception(record.exc_info)
276+
else:
277+
exc_info = record.exc_text
278+
return {
279+
'exc_info': exc_info,
280+
'filename': record.filename,
281+
}
282+
283+
@classmethod
284+
def format_exception(cls, exc_info):
285+
286+
return ''.join(traceback.format_exception(*exc_info)) if exc_info else ''
287+
255288
def format(self, record):
256289
utcnow = datetime.utcnow()
257290
json_log_object = {"type": "log",
@@ -272,6 +305,9 @@ def format(self, record):
272305
if hasattr(record, 'props'):
273306
json_log_object.update(record.props)
274307

308+
if hasattr(record, 'exc_info') or hasattr(record, 'exc_text'):
309+
json_log_object.update(self.get_exc_fields(record))
310+
275311
return JSON_SERIALIZER(json_log_object)
276312

277313

0 commit comments

Comments
 (0)