diff options
author | Armin Ronacher <armin.ronacher@active-4.com> | 2016-04-22 22:16:02 +0200 |
---|---|---|
committer | Armin Ronacher <armin.ronacher@active-4.com> | 2016-04-22 23:47:16 +0200 |
commit | e1e0f1ce3ed9d5a3e349773a45f29d2db246cb5a (patch) | |
tree | 3a973ffaddf3385f40f27d4275ca07509b6552db | |
parent | 37b01934a23bdcd033b47941b398d3006a3bb22b (diff) | |
download | raven-e1e0f1ce3ed9d5a3e349773a45f29d2db246cb5a.tar.gz |
Added support for overriding log handlers for breadcrumbs.
-rw-r--r-- | raven/breadcrumbs.py | 32 |
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 |