Pytest plugin providing three logger fixtures with basic or full writing to log files
Note: An improved rewrite of this plugin is pytest-instrument.
Three logger fixtures, one of each scope: session, module and function.
Three options for writing log records to file: quiet, basic, full.
- Pytest
- Pathlib2 (if using Python 2.7)
You can install "pytest-logfest" via pip from PyPI:
$ pip install pytest-logfest
The three logger fixtures exposed by this plugin are:
session_loggermodule_loggerfunction_logger
They expose a Python Logger object, so you can use them as such, e.g. session_logger.INFO("This is a log record of level INFO.")
The log nodes of these loggers match the path to the corresponding location or file.
Pytest's --log-cli-level=<level> will display these log records on stdout.
Writing the log records of the loggers to file can be controlled by the --logfest command-line option:
--logfest=quietor option omitted: no log files are written.--logfest=basic: one log file containing INFO and higher for passed tests, DEBUG and higher for setup errors or failed tests.--logfest=full: in addition to the basic log file, all log records are written to a session log file and one log file per module.
Log file names and locations are as follows (directories will be created if needed):
- basic log file in
./artifacts:session-<session timestmap>.log - session-level full log file in
./artifacts:<request.node.name | logfest-root-node>-<session timestmap>.log - module-level full log file in
./artifacts/<path-to-module>:<module_name>-<session timestmap>.log
logfest-root-node can be set in pytest.ini (see below). You can change the compostion of file names through hooks (see below).
The following values in pytest.ini are relevant to this plugin:
logfest-root-node: name used as root log node and in log filenames; if not set, defaults to the session'srequest.node.name.log-level: should be set toinfoor lower, so pytest captures all relevant log records.log-format: the default format is not very convenient in combination with this plugin, suggestion:%(name)s - %(levelname)s - %(message)s
There are three hooks to change the components of the log filenames:
pytest_logfest_log_file_name_basicpytest_logfest_log_file_name_full_sessionpytest_logfest_log_file_name_full_module
The expose a list that will be joined with the separator character - and appended with .log.
Contributions are very welcome. Tests can be run with tox, please ensure good test coverage before you submit a pull request.
Distributed under the terms of the MIT license, "pytest-logfest" is free and open source software.
If you encounter any problems, please file an issue along with a detailed description.
This pytest plugin was generated with Cookiecutter along with @hackebrot's cookiecutter-pytest-plugin template.
Thanks to my employer Mendix, for the crafting days in which I worked on this plugin, and for the permission to open-source it.