Skip to content

Commit

Permalink
Properly reset LogCaptureHandler in caplog
Browse files Browse the repository at this point in the history
Closes #3297
  • Loading branch information
twmr committed Mar 12, 2018
1 parent 3909225 commit 62b224b
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions _pytest/logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,10 @@ def emit(self, record):
self.records.append(record)
logging.StreamHandler.emit(self, record)

def reset(self):
self.records = []
self.stream = py.io.TextIO()


class LogCaptureFixture(object):
"""Provides access and control of log capturing."""
Expand All @@ -197,6 +201,9 @@ def _finalize(self):

@property
def handler(self):
"""
:rtype: LogCaptureHandler
"""
return self._item.catch_log_handler

def get_records(self, when):
Expand Down Expand Up @@ -239,8 +246,8 @@ def record_tuples(self):
return [(r.name, r.levelno, r.getMessage()) for r in self.records]

def clear(self):
"""Reset the list of log records."""
self.handler.records = []
"""Reset the list of log records and the captured log text."""
self.handler.reset()

def set_level(self, level, logger=None):
"""Sets the level for capturing of logs. The level will be restored to its previous value at the end of
Expand Down Expand Up @@ -285,6 +292,8 @@ def caplog(request):
* caplog.text() -> string containing formatted log output
* caplog.records() -> list of logging.LogRecord instances
* caplog.record_tuples() -> list of (logger_name, level, message) tuples
* caplog.clear() -> clear captured records and formatted log output
string
"""
result = LogCaptureFixture(request.node)
yield result
Expand Down

0 comments on commit 62b224b

Please sign in to comment.