import logbook
from .utils import capturing_stderr_context
def test_null_handler(activation_strategy, logger):
with capturing_stderr_context() as captured:
with activation_strategy(logbook.NullHandler()):
with activation_strategy(logbook.TestHandler(level='ERROR')) as handler:
logger.error('An error')
logger.warn('A warning')
assert captured.getvalue() == ''
assert (not handler.has_warning('A warning'))
assert handler.has_error('An error')
def test_blackhole_setting(activation_strategy):
null_handler = logbook.NullHandler()
heavy_init = logbook.LogRecord.heavy_init
with activation_strategy(null_handler):
def new_heavy_init(self):
raise RuntimeError('should not be triggered')
logbook.LogRecord.heavy_init = new_heavy_init
try:
with activation_strategy(null_handler):
logbook.warn('Awesome')
finally:
logbook.LogRecord.heavy_init = heavy_init
null_handler.bubble = True
with capturing_stderr_context() as captured:
logbook.warning('Not a blockhole')
assert captured.getvalue() != ''
def test_null_handler_filtering(activation_strategy):
logger1 = logbook.Logger("1")
logger2 = logbook.Logger("2")
outer = logbook.TestHandler()
inner = logbook.NullHandler()
inner.filter = lambda record, handler: record.dispatcher is logger1
with activation_strategy(outer):
with activation_strategy(inner):
logger1.warn("1")
logger2.warn("2")
assert outer.has_warning('2', channel='2')
assert (not outer.has_warning('1', channel='1'))