[/ / Copyright (c) 2003 Boost.Test contributors / / Distributed under the Boost Software License, Version 1.0. (See accompanying / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) /] [section:log_formats Log formats] The __UTF__ supports several log formats: * [link boost_test.test_output.log_formats.log_human_readable_format HRF]: human readable format * [link boost_test.test_output.log_formats.log_xml_format XML]: an machine interpretable log format * [link boost_test.test_output.log_formats.log_junit_format JUNIT]: a standardized log format understandable by automated tools such as Continuous Builds [h4 Design] The following functionalities are supported by the logging framework: * each logger manages its own log level. The rationale is that some log format are meant for automated processing, and by design need to carry all the information that will later be digested by a visualization tool. * several log format may be active at the same time. The rationale is that the user might want to see a non-exhaustive log in his terminal using a human friendly format, while having a detailed full log in a file with a format dedicated to automated processing. * each logger /indicates/ its default output stream. some logger may prefer to output to one of the standard stream while other may prefer output to a file. [note The logger indicates the default output stream in case the default should be used. ] [h4 Defaults] By default the active log level threshold is set to * [link boost_test.test_output.log_formats.test_log_output "non fatal error messages"] and the test log output is generated in [link boost_test.test_output.log_formats.log_human_readable_format human readable format]. * [link boost_test.test_output.log_formats.test_log_output "general information"] for [link boost_test.test_output.log_formats.log_junit_format JUNIT] log format The active log level threshold and the output format can be configured at runtime during a test module invocation and at compile time from within a test module using the [link boost_test.test_output.logging_api test log public interfaces]. The behavior is logger specific though. [/ -------------------------------------------------------------------------------------------------- ] [section Test log output] The test log is produced during the test execution. All entries in the test log are assigned a particular log level. Only the entries with level that exceeds the ['active log level threshold] actually appear in the test log output. Log levels are arranged by the 'importance' of the log entries. Here is the list of all levels in order of increasing 'importance': [#test_log_output_table] [table:id_messages Messages [ [Notifications] [Meaning] ] [ [Success] [This category includes messages that provide information on successfully passed assertions] ] [ [Test tree traversal] [This category includes messages that are produced by the __UTF__ core and indicate which test suites/cases are currently being executed or skipped] ] [ [General information] [This category includes general information messages produced in most cases by a test module author using the macro __BOOST_TEST_MESSAGE__] ] [ [Warning] [This category includes messages produced by failed `WARNING` level assertions] ] [ [Non fatal error] [This category includes messages produced by failed `CHECK` level assertions] ] [ [Uncaught C++ exceptions] [This category includes messages that are produced by the __UTF__ and provide detailed information on the C++ exceptions uncaught by the test case body. ] ] [ [Non-fatal system error] [This category includes messages that are produced by the __UTF__ itself and provides information about caught non-fatal system error. For example it includes messages produced in the case of test case timeout or if floating point values calculation errors are caught. ] ] [ [Fatal system error] [This category includes messages produced by failed require level assertions and by the __UTF__ itself in case of abnormal test case termination.] ] ] [note The active log level works namely as threshold, not as selector. For the given active log level threshold, all test log entries with ['importance] higher than threshold are enabled and all test log entries with ['importance] below threshold are disabled. ] In addition to the levels described above the test log defines two special log levels. The current log level can be set to: * All messages[br] If active log level threshold is set to this value, all test log entries appear in the output. In practice this is equivalent to setting the active log level threshold to ['success information messages] * Nothing[br] If the active log level threshold is set to this value, none of test log entries appear in the output. This log level is used to execute a ['silent] test that doesn't produce any test log and only generates a result code indicating whether test failed or passed. [endsect] [/ test log output] [section:log_human_readable_format HRF: Human readable log format] The human readable log format is designed to closely match an errors description produced by the Microsoft family of C++ compilers. This format allows jumping to the error location, if test module output is redirected into IDE output window. The rest of the log messages are designed to produce the most human friendly description of the events occurring in test module. This is a default format generated by test modules. Here the list of events along with corresponding message and the condition that has to be satisfied for it to appear in the output. [table [ [Event] [Condition] [Output] ] [ [On testing start] [threshold != log_nothing] [`Running test case(s) ...`] ] [ [On testing start] [threshold != log_nothing, show_build_info is set] [ [pre Platform: $BOOST_PLATFORM Compiler: $BOOST_COMPILER STL : $BOOST_STDLIB Boost : $BOOST_VERSION]] ] [ [On abnormal testing termination] [threshold <= log_messages] [`Test is aborted`] ] [ [On test unit start] [threshold <= log_test_units] [`Entering test `] ] [ [On test unit end] [threshold <= log_test_units; testing time is reported only if elapsed time is more than 1 us.] [`Leaving test ; testing time `] ] [ [On skipped test unit] [threshold <= log_test_units] [`Test is skipped`] ] [ [On uncaught C++ exception] [threshold <= log_cpp_exception_errors. Checkpoint message is reported only if provided] [`unknown location(0): fatal error in : : last checkpoint: `] ] [ [On resumable system error] [threshold <= log_system_errors. Checkpoint message is reported only if provided] [`unknown location(0): fatal error in : : last checkpoint: `] ] [ [On fatal system error] [threshold <= log_fatal_errors. Checkpoint message is reported only if provided] [`unknown location(0): fatal error in : : last checkpoint: `] ] [ [On passed test assertion] [threshold <= log_successful_tests] [`: info: check passed`] ] [ [On failed WARNING level test assertion] [threshold <= log_warnings] [`: warning in : condition is not satisfied`]] [ [On failed CHECK level test assertion] [threshold <= log_all_errors] [`: error in : check failed`] ] [ [On failed REQUIRE level test assertion] [threshold <= log_fatal_errors] [`: fatal error in : critical check failed`]] [ [On test log message] [threshold <= log_messages] [``]] ] The level of details concerning the error message depends on the [link boost_test.testing_tools testing tool] producing the log entry. [endsect] [/ human readable report] [/ -------------------------------------------------------------------------------------------------- ] [section:log_xml_format XML log format] This log format is designed for automated test results processing. The test log output XML schema depends on the active log level threshold. [endsect] [/section:log_xml_format ] [/ -------------------------------------------------------------------------------------------------- ] [section:log_junit_format JUNIT log format] The [@http://junit.org/ JUNIT format] is log format supported by a wide range of Continuous Build/Integration tools. This format defaults its log level to [link test_log_output_table `General information`] and its default stream to a file named after [link boost_test.tests_organization.test_tree.master_test_suite master test suite]. The logger will attempt to not overwrite any existing output file, which is also usually understood by Continuous Build tools. This format is in fact both a log and a report format: most of the Continuous Build tools will summarize the content of a JUNIT file and show an overview of the failing/succeeding tests of a module (report format) while letting the user inspect the detailed logs (log format). [caution The minimal log-level for the JUnit logger is [link test_log_output_table `non fatal error`]. Any set-up to higher log level will default to that minimal log-level.] [note Until Boost 1.64, the log level was previously defaulting to `success` and was causing a heavy load on the logging part in some circumstances.] [endsect] [/section:log_junit_format ] [endsect]