diff options
author | Santeri Paavolainen <santeri.paavolainen@codento.com> | 2012-09-30 06:54:31 +0300 |
---|---|---|
committer | Santeri Paavolainen <santeri.paavolainen@codento.com> | 2012-09-30 06:54:31 +0300 |
commit | 511ad18ea343238053208313a411392380f1a12b (patch) | |
tree | 65144cb4cf8e59fad9859787aa62a53ed4d07adf /nose/plugins | |
parent | 908b2cda43eff9ab7a5045b6f6dfe3a718fb9afd (diff) | |
download | nose-511ad18ea343238053208313a411392380f1a12b.tar.gz |
Format captured log records immediately to have consistent formatting of mutables.
This is a fix for https://github.com/nose-devs/nose/issues/561
Diffstat (limited to 'nose/plugins')
-rw-r--r-- | nose/plugins/logcapture.py | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/nose/plugins/logcapture.py b/nose/plugins/logcapture.py index 9dba58f..30b4a96 100644 --- a/nose/plugins/logcapture.py +++ b/nose/plugins/logcapture.py @@ -16,7 +16,7 @@ You can remove other installed logging handlers with the """ import logging -from logging.handlers import BufferingHandler +from logging import Handler import threading from nose.plugins.base import Plugin @@ -71,12 +71,15 @@ class FilterSet(object): return self._any_match(self.exclusive, record) -class MyMemoryHandler(BufferingHandler): - def __init__(self, capacity, logformat, logdatefmt, filters): - BufferingHandler.__init__(self, capacity) +class MyMemoryHandler(Handler): + def __init__(self, logformat, logdatefmt, filters): + Handler.__init__(self) fmt = logging.Formatter(logformat, logdatefmt) self.setFormatter(fmt) self.filterset = FilterSet(filters) + self.buffer = [] + def emit(self, record): + self.buffer.append(self.format(record)) def flush(self): pass # do nothing def truncate(self): @@ -200,7 +203,7 @@ class LogCapture(Plugin): self.start() def start(self): - self.handler = MyMemoryHandler(1000, self.logformat, self.logdatefmt, + self.handler = MyMemoryHandler(self.logformat, self.logdatefmt, self.filters) self.setupLoghandler() @@ -233,8 +236,7 @@ class LogCapture(Plugin): return (ec, self.addCaptureToErr(ev, records), tb) def formatLogRecords(self): - format = self.handler.format - return [safe_str(format(r)) for r in self.handler.buffer] + return map(safe_str, self.handler.buffer) def addCaptureToErr(self, ev, records): return '\n'.join([safe_str(ev), ln('>> begin captured logging <<')] + \ |