# Reports **Contents**
[The reports](#the-reports)
[Custom output](#custom-output)
[Where Catch2's reporters went](#where-catch2s-reporters-went)
The [Catch3 runner](progmasoft-runner.md#top) writes its own reports. Catch2's reporters, and `CATCH_REGISTER_REPORTER`, were removed with Catch2's runner: a reporter sees one process, and a Catch3 run spreads over many. ## The reports * **Console.** Progress while the run goes on, each failure with its expansion, messages, sections and [analysis](progmasoft-runner.md#what-a-failure-report-says), then a summary. `--verbose`, `--success`, `--quiet`, `--slowest` and `--color` adjust it. * **JUnit XML**, `--junit=FILE`. One `` per test; a failure is ``, a crash or timeout ``, a skipped, blocked or not-run test ``. Earlier failed attempts are `` and, for a test that passed in the end, ``. Under Bazel it is written to `XML_OUTPUT_FILE`. * **JSON**, `--json=FILE`. Everything the runner knows about the run, in the `catch3-run` [format](progmasoft-runner.md#formats-other-tools-read). * **Trace**, `--trace=FILE`, in the Trace Event Format. `` holds the model the reports are written from, and `` the JUnit writer, for tools that build a `RunResult` themselves. ## Custom output For output of your own: * Read the JSON report. It is the complete record of a run, and its format is versioned. * Write a [listener](event-listeners.md#top). Listeners receive Catch2's events in every worker process; what one prints outside a test reaches the runner's standard error. ## Where Catch2's reporters went | Catch2 | Catch3 | | --- | --- | | `console`, `compact` | the console report | | `junit` | `--junit=FILE` | | `json`, `xml` | `--json=FILE` | | `sonarqube`, `tap`, `teamcity`, `automake` | convert the JSON report, or a listener | | `--reporter NAME::out=FILE` | `--junit=FILE`, `--json=FILE` | | `CATCH_REGISTER_REPORTER` | a listener, or a tool reading the JSON report | --- [Home](Readme.md#top)