From dd0cf23870696a9fa5ad419f03b840645c9357eb Mon Sep 17 00:00:00 2001 From: Gilles Dartiguelongue Date: Tue, 5 Aug 2014 17:50:22 +0200 Subject: [PATCH] Add support for exc_traceback --- fluent/handler.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/fluent/handler.py b/fluent/handler.py index 0fef160..8d40fda 100644 --- a/fluent/handler.py +++ b/fluent/handler.py @@ -2,6 +2,7 @@ import logging import socket +import traceback try: import simplejson as json @@ -21,6 +22,10 @@ class FluentRecordFormatter(logging.Formatter, object): Best used with server storing data in an ElasticSearch cluster for example. + Supports an extra `exc_traceback` format argument that represents a + traceback when logging an exception as return by + :meth:`traceback.extract_tb`. + :param fmt: a dict with format string as values to map to provided keys. """ def __init__(self, fmt=None, datefmt=None): @@ -42,9 +47,17 @@ def format(self, record): super(FluentRecordFormatter, self).format(record) # Add ours record.hostname = self.hostname + # Apply format - data = dict([(key, value % record.__dict__) - for key, value in self._fmt_dict.items()]) + data = {} + for key, value in self._fmt_dict.items(): + if value.find('%(exc_traceback)') >= 0: + if record.exc_info: + data[key] = traceback.extract_tb(record.exc_info[2]) + else: + data[key] = None + else: + data[key] = value % record.__dict__ self._structuring(data, record.msg) return data