Source code for zope.testing.loggingsupport
##############################################################################
#
# Copyright (c) 2004 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
import logging
[docs]
class Handler(logging.Handler):
"""
A `logging.Handler` that collects logging records
that are emitted by the loggers named in *names*.
You must call `install` to begin collecting records,
and before destroying this object you must call
`uninstall`.
"""
def __init__(self, *names, **kw):
logging.Handler.__init__(self)
self.names = names
self.records = []
self.setLoggerLevel(**kw)
def setLoggerLevel(self, level=1):
self.level = level
self.oldlevels = {}
[docs]
def emit(self, record):
"""
Save the given record in ``self.records``.
"""
self.records.append(record)
[docs]
def clear(self):
"""
Delete all records collecting by this
object.
"""
del self.records[:]
[docs]
def install(self):
"""
Begin collecting logging records for all the
logger names given to the constructor.
"""
for name in self.names:
logger = logging.getLogger(name)
self.oldlevels[name] = logger.level
logger.setLevel(self.level)
logger.addHandler(self)
[docs]
def uninstall(self):
"""
Stop collecting logging records.
"""
for name in self.names:
logger = logging.getLogger(name)
logger.setLevel(self.oldlevels[name])
logger.removeHandler(self)
def __str__(self):
return '\n'.join(
"{} {}\n {}".format(
record.name, record.levelname,
'\n'.join(
line
for line in record.getMessage().split('\n')
if line.strip()
),
)
for record in self.records
)
[docs]
class InstalledHandler(Handler):
"""
A `Handler` that automatically calls `install`
when constructed.
You must still manually call `uninstall`.
"""
def __init__(self, *names, **kw):
Handler.__init__(self, *names, **kw)
self.install()