Merge pull request #3585 from wcooley/feature/3579-caplog-messages
Add `messages` property to `caplog` fixture.
This commit is contained in:
commit
3dcdaab103
1
AUTHORS
1
AUTHORS
|
@ -204,6 +204,7 @@ Victor Uriarte
|
||||||
Vidar T. Fauske
|
Vidar T. Fauske
|
||||||
Vitaly Lashmanov
|
Vitaly Lashmanov
|
||||||
Vlad Dragos
|
Vlad Dragos
|
||||||
|
Wil Cooley
|
||||||
William Lee
|
William Lee
|
||||||
Wouter van Ackooy
|
Wouter van Ackooy
|
||||||
Xuan Luong
|
Xuan Luong
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fixture ``caplog`` now has a ``messages`` property, providing convenient access to the format-interpolated log messages without the extra data provided by the formatter/handler.
|
|
@ -270,6 +270,22 @@ class LogCaptureFixture(object):
|
||||||
"""
|
"""
|
||||||
return [(r.name, r.levelno, r.getMessage()) for r in self.records]
|
return [(r.name, r.levelno, r.getMessage()) for r in self.records]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def messages(self):
|
||||||
|
"""Returns a list of format-interpolated log messages.
|
||||||
|
|
||||||
|
Unlike 'records', which contains the format string and parameters for interpolation, log messages in this list
|
||||||
|
are all interpolated.
|
||||||
|
Unlike 'text', which contains the output from the handler, log messages in this list are unadorned with
|
||||||
|
levels, timestamps, etc, making exact comparisions more reliable.
|
||||||
|
|
||||||
|
Note that traceback or stack info (from :func:`logging.exception` or the `exc_info` or `stack_info` arguments
|
||||||
|
to the logging functions) is not included, as this is added by the formatter in the handler.
|
||||||
|
|
||||||
|
.. versionadded:: 3.7
|
||||||
|
"""
|
||||||
|
return [r.getMessage() for r in self.records]
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
"""Reset the list of log records and the captured log text."""
|
"""Reset the list of log records and the captured log text."""
|
||||||
self.handler.reset()
|
self.handler.reset()
|
||||||
|
|
|
@ -73,6 +73,27 @@ def test_log_access(caplog):
|
||||||
assert "boo arg" in caplog.text
|
assert "boo arg" in caplog.text
|
||||||
|
|
||||||
|
|
||||||
|
def test_messages(caplog):
|
||||||
|
caplog.set_level(logging.INFO)
|
||||||
|
logger.info("boo %s", "arg")
|
||||||
|
logger.info("bar %s\nbaz %s", "arg1", "arg2")
|
||||||
|
assert "boo arg" == caplog.messages[0]
|
||||||
|
assert "bar arg1\nbaz arg2" == caplog.messages[1]
|
||||||
|
assert caplog.text.count("\n") > len(caplog.messages)
|
||||||
|
assert len(caplog.text.splitlines()) > len(caplog.messages)
|
||||||
|
|
||||||
|
try:
|
||||||
|
raise Exception("test")
|
||||||
|
except Exception:
|
||||||
|
logger.exception("oops")
|
||||||
|
|
||||||
|
assert "oops" in caplog.text
|
||||||
|
assert "oops" in caplog.messages[-1]
|
||||||
|
# Tracebacks are stored in the record and not added until the formatter or handler.
|
||||||
|
assert "Exception" in caplog.text
|
||||||
|
assert "Exception" not in caplog.messages[-1]
|
||||||
|
|
||||||
|
|
||||||
def test_record_tuples(caplog):
|
def test_record_tuples(caplog):
|
||||||
caplog.set_level(logging.INFO)
|
caplog.set_level(logging.INFO)
|
||||||
logger.info("boo %s", "arg")
|
logger.info("boo %s", "arg")
|
||||||
|
|
Loading…
Reference in New Issue