diff options
author | Armin Ronacher <armin.ronacher@active-4.com> | 2016-05-14 02:37:25 +0200 |
---|---|---|
committer | Armin Ronacher <armin.ronacher@active-4.com> | 2016-05-14 02:37:25 +0200 |
commit | 9054fdd3ce06f81fc4995d95e0649dae513503d7 (patch) | |
tree | d4292bc894d6189fbe0c57e1d276ab3a31243627 | |
parent | c3e3e4dcbb1459e8b93be3bddca4cbcbdb971362 (diff) | |
parent | c4293b4e0f99e6550446e7e66825984935c6a2c1 (diff) | |
download | raven-9054fdd3ce06f81fc4995d95e0649dae513503d7.tar.gz |
Merge pull request #767 from getsentry/bugfix/resiliant-log
More resilient log reporting.
-rw-r--r-- | raven/breadcrumbs.py | 25 | ||||
-rw-r--r-- | tests/breadcrumbs/tests.py | 12 |
2 files changed, 32 insertions, 5 deletions
diff --git a/raven/breadcrumbs.py b/raven/breadcrumbs.py index a0c91a6..803c9c5 100644 --- a/raven/breadcrumbs.py +++ b/raven/breadcrumbs.py @@ -11,6 +11,9 @@ from raven.utils import once special_logger_handlers = {} +logger = logging.getLogger('raven') + + class BreadcrumbBuffer(object): def __init__(self, limit=100): @@ -39,9 +42,13 @@ class BreadcrumbBuffer(object): rv = [] for idx, (payload, processor) in enumerate(self.buffer): if processor is not None: - processor(payload) + try: + processor(payload) + except Exception: + logger.exception('Failed to process breadcrumbs. Ignored') self.buffer[idx] = (payload, None) - rv.append(payload) + if payload is not None: + rv.append(payload) return rv @@ -78,9 +85,17 @@ def _record_log_breadcrumb(logger, level, msg, *args, **kwargs): return def processor(data): - formatted_msg = text_type(msg) - if args: - formatted_msg = msg % args + formatted_msg = msg + + # If people log bad things, this can happen. Then just don't do + # anything. + try: + formatted_msg = text_type(msg) + if args: + formatted_msg = msg % args + except Exception: + pass + # We do not want to include exc_info as argument because it often # lies (set to a constant value like 1 or True) or even if it's a # tuple it will not be particularly useful for us as we cannot diff --git a/tests/breadcrumbs/tests.py b/tests/breadcrumbs/tests.py index ab424d8..00fd463 100644 --- a/tests/breadcrumbs/tests.py +++ b/tests/breadcrumbs/tests.py @@ -56,3 +56,15 @@ class BreadcrumbTestCase(TestCase): assert int(items[3]) == lineno assert items[4] == 'INFO' assert items[5] == 'Hello World!' + + def test_broken_logging(self): + client = Client('http://foo:bar@example.com/0') + with client.context: + log = logging.getLogger('whatever.foo') + log.info('This is a message with %s. %s!', 42) + crumbs = client.context.breadcrumbs.get_buffer() + + assert len(crumbs) == 1 + assert crumbs[0]['type'] == 'default' + assert crumbs[0]['category'] == 'whatever.foo' + assert crumbs[0]['message'] == 'This is a message with %s. %s!' |