Skip to main content

py.test plugin to catch log messages. This is a fork of pytest-capturelog.

Installation

The pytest-catchlog package may be installed with pip or easy_install:

pip install pytest-catchlog
easy_install pytest-catchlog

Usage

If the plugin is installed log messages are captured by default and for each failed test will be shown in the same manner as captured stdout and stderr.

Running without options:

py.test test_pytest_catchlog.py

Shows failed tests like so:

----------------------- Captured stdlog call ----------------------
test_pytest_catchlog.py    26 INFO     text going to logger
----------------------- Captured stdout call ----------------------
text going to stdout
----------------------- Captured stderr call ----------------------
text going to stderr
==================== 2 failed in 0.02 seconds =====================

By default each captured log message shows the module, line number, log level and message. Showing the exact module and line number is useful for testing and debugging. If desired the log format and date format can be specified to anything that the logging module supports.

Running pytest specifying formatting options:

py.test --log-format="%(asctime)s %(levelname)s %(message)s" \
        --log-date-format="%Y-%m-%d %H:%M:%S" test_pytest_catchlog.py

Shows failed tests like so:

----------------------- Captured stdlog call ----------------------
2010-04-10 14:48:44 INFO text going to logger
----------------------- Captured stdout call ----------------------
text going to stdout
----------------------- Captured stderr call ----------------------
text going to stderr
==================== 2 failed in 0.02 seconds =====================

These options can also be customized through a configuration file:

[pytest]
log_format = %(asctime)s %(levelname)s %(message)s
log_date_format = %Y-%m-%d %H:%M:%S

Although the same effect could be achieved through the addopts setting, using dedicated options should be preferred since the latter doesn’t force other developers to have pytest-catchlog installed (while at the same time, addopts approach would fail with ‘unrecognized arguments’ error). Command line arguments take precedence.

Further it is possible to disable reporting logs on failed tests completely with:

py.test --no-print-logs test_pytest_catchlog.py

Shows failed tests in the normal manner as no logs were captured:

----------------------- Captured stdout call ----------------------
text going to stdout
----------------------- Captured stderr call ----------------------
text going to stderr
==================== 2 failed in 0.02 seconds =====================

Inside tests it is possible to change the log level for the captured log messages. This is supported by the caplog funcarg:

def test_foo(caplog):
    caplog.set_level(logging.INFO)
    pass

By default the level is set on the handler used to catch the log messages, however as a convenience it is also possible to set the log level of any logger:

def test_foo(caplog):
    caplog.set_level(logging.CRITICAL, logger='root.baz')
    pass

It is also possible to use a context manager to temporarily change the log level:

def test_bar(caplog):
    with caplog.at_level(logging.INFO):
        pass

Again, by default the level of the handler is affected but the level of any logger can be changed instead with:

def test_bar(caplog):
    with caplog.at_level(logging.CRITICAL, logger='root.baz'):
        pass

Lastly all the logs sent to the logger during the test run are made available on the funcarg in the form of both the LogRecord instances and the final log text. This is useful for when you want to assert on the contents of a message:

def test_baz(caplog):
    func_under_test()
    for record in caplog.records:
        assert record.levelname != 'CRITICAL'
    assert 'wally' not in caplog.text

For all the available attributes of the log records see the logging.LogRecord class.

You can also resort to record_tuples if all you want to do is to ensure, that certain messages have been logged under a given logger name with a given severity and message:

def test_foo(caplog):
    logging.getLogger().info('boo %s', 'arg')

    assert caplog.record_tuples == [
        ('root', logging.INFO, 'boo arg'),
    ]

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest-catchlog-1.2.0.zip (13.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_catchlog-1.2.0-py2.py3-none-any.whl (8.6 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pytest-catchlog-1.2.0.zip.

File metadata

  • Download URL: pytest-catchlog-1.2.0.zip
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytest-catchlog-1.2.0.zip
Algorithm Hash digest
SHA256 e419a4efc706c948fbac2c5e8a35bb6f16edb3bb0643b86ba28b6bc69e792d32
MD5 c1f4d6425370b9c172a57c3f09f8297d
BLAKE2b-256 e5138cf42c940d78d2a7716a7bf1c3c5858ac091552d6f950d407dcdb214b601

See more details on using hashes here.

File details

Details for the file pytest_catchlog-1.2.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_catchlog-1.2.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 12ba423bb4c058cad576245be139a5b3fe749c26e75a78d075a5c4711077ea31
MD5 87297fa1eb85266a46a9be4d6e63c477
BLAKE2b-256 814685ba1ad0c7ca1b5799e43c72303384406445b1ec0274d50ccc8be22fb8fb

See more details on using hashes here.

Release history Release notifications | RSS feed

1.2.2

2 files

1.2.1

2 files

This release

1.2.0 This release

2 files

1.1

2 files

1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page