summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Ronacher <armin.ronacher@active-4.com>2016-04-22 22:16:02 +0200
committerArmin Ronacher <armin.ronacher@active-4.com>2016-04-22 23:47:16 +0200
commite1e0f1ce3ed9d5a3e349773a45f29d2db246cb5a (patch)
tree3a973ffaddf3385f40f27d4275ca07509b6552db
parent37b01934a23bdcd033b47941b398d3006a3bb22b (diff)
downloadraven-e1e0f1ce3ed9d5a3e349773a45f29d2db246cb5a.tar.gz
Added support for overriding log handlers for breadcrumbs.
-rw-r--r--raven/breadcrumbs.py32
1 files changed, 31 insertions, 1 deletions
diff --git a/raven/breadcrumbs.py b/raven/breadcrumbs.py
index 0ecec48..51b4386 100644
--- a/raven/breadcrumbs.py
+++ b/raven/breadcrumbs.py
@@ -4,10 +4,13 @@ import time
import logging
from types import FunctionType
-from raven._compat import iteritems, get_code, text_type
+from raven._compat import iteritems, get_code, text_type, string_types
from raven.utils import once
+special_logger_handlers = {}
+
+
class BreadcrumbBuffer(object):
def __init__(self, limit=100):
@@ -52,6 +55,12 @@ def record_breadcrumb(type, data=None, timestamp=None):
def _record_log_breadcrumb(logger, level, msg, *args, **kwargs):
+ handler = special_logger_handlers.get(logger.name)
+ if handler is not None:
+ rv = handler(logger, level, msg, args, kwargs)
+ if rv:
+ return
+
def _make_data():
formatted_msg = text_type(msg)
if args:
@@ -156,4 +165,25 @@ def install_logging_hook():
_patch_logger()
+def ignore_logger(name_or_logger):
+ """Ignores a logger for the regular breadcrumb code. This is useful
+ for framework integration code where some log messages should be
+ specially handled.
+ """
+ register_special_log_handler(name_or_logger, lambda *args: True)
+
+
+def register_special_log_handler(name_or_logger, callback):
+ """Registers a callback for log handling. The callback is invoked
+ with give arguments: `logger`, `level`, `msg`, `args` and `kwargs`
+ which are the values passed to the logging system. If the callback
+ returns `True` the default handling is disabled.
+ """
+ if isinstance(name_or_logger, string_types):
+ name = name_or_logger
+ else:
+ name = name_or_logger.name
+ special_logger_handlers[name] = callback
+
+
import raven.context