diff options
author | Malthe Borch <mborch@gmail.com> | 2013-08-30 14:04:41 +0200 |
---|---|---|
committer | Malthe Borch <mborch@gmail.com> | 2014-02-12 17:09:09 +0100 |
commit | a22588c93f76746a2e7a973c6ade30349170353f (patch) | |
tree | c49762f39a94518acd55e2bb828f569e369739d6 | |
parent | 7ce321f8cd98318edb889f1dc8ce7e3ab9a8c8a2 (diff) | |
download | nose-a22588c93f76746a2e7a973c6ade30349170353f.tar.gz |
Fixed issue with builtin filtering.
The superclass (which ultimately inherits from 'Handler')
checks against any registered filters, before allowing a
logging record. Nose's logging capture plugin should do the
same, because these filters are allowed to modify the record.
And it can easily happen that the logging format requires
this modification (e.g. add an attribute).
-rw-r--r-- | CHANGELOG | 2 | ||||
-rw-r--r-- | nose/plugins/logcapture.py | 3 | ||||
-rw-r--r-- | unit_tests/test_logcapture_plugin.py | 20 |
3 files changed, 24 insertions, 1 deletions
@@ -1,5 +1,7 @@ In Development +- The log capture plugin now correctly applies filters that were added + using `addFilter`. - Corrected a reference to the multiprocessing plugin in the documentation. Patch by Nick Loadholtes. - Fixed #447: doctests fail when getpackage() returns None diff --git a/nose/plugins/logcapture.py b/nose/plugins/logcapture.py index 30b4a96..101b335 100644 --- a/nose/plugins/logcapture.py +++ b/nose/plugins/logcapture.py @@ -85,7 +85,8 @@ class MyMemoryHandler(Handler): def truncate(self): self.buffer = [] def filter(self, record): - return self.filterset.allow(record.name) + if self.filterset.allow(record.name): + return Handler.filter(self, record) def __getstate__(self): state = self.__dict__.copy() del state['lock'] diff --git a/unit_tests/test_logcapture_plugin.py b/unit_tests/test_logcapture_plugin.py index 63d1f8b..63aa651 100644 --- a/unit_tests/test_logcapture_plugin.py +++ b/unit_tests/test_logcapture_plugin.py @@ -155,6 +155,26 @@ class TestLogCapturePlugin(object): eq_(1, len(records)) eq_("++Hello++", records[0]) + def test_builtin_logging_filtering(self): + c = LogCapture() + c.logformat = '++%(message)s++' + c.start() + log = logging.getLogger("foobar.something") + filtered = [] + class filter(object): + def filter(record): + filtered.append(record) + return len(filtered) == 1 + filter = staticmethod(filter) + c.handler.addFilter(filter) + log.debug("Hello") + log.debug("World") + c.end() + eq_(2, len(filtered)) + records = c.formatLogRecords() + eq_(1, len(records)) + eq_("++Hello++", records[0]) + def test_logging_filter(self): env = {'NOSE_LOGFILTER': 'foo,bar'} c = LogCapture() |