Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

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

Project Description

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 log ---------------------------
test_pytest_catchlog.py    26 INFO     text going to logger
------------------------- Captured stdout -------------------------
text going to stdout
------------------------- Captured stderr -------------------------
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 log ---------------------------
2010-04-10 14:48:44 INFO text going to logger
------------------------- Captured stdout -------------------------
text going to stdout
------------------------- Captured stderr -------------------------
text going to stderr
==================== 2 failed in 0.02 seconds =====================

Further it is possible to disable capturing of logs completely with:

py.test --nocatchlog test_pytest_catchlog.py

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

------------------------- Captured stdout -------------------------
text going to stdout
------------------------- Captured stderr -------------------------
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.setLevel(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.setLevel(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.atLevel(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.atLevel(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'),
    ]
Release History

Release History

History Node

1.2.2

History Node

1.2.1

History Node

1.2.0

History Node

1.1

This version
History Node

1.0

Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
pytest_catchlog-1.0-py2.py3-none-any.whl (6.8 kB) Copy SHA256 Checksum SHA256 3.4 Wheel Dec 8, 2014
pytest-catchlog-1.0.zip (10.5 kB) Copy SHA256 Checksum SHA256 Source Dec 8, 2014

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting