ParaView 5.7 introduced modernized logging capabilities to support log reporting at different verbosity levels. For example, errors and warnings are reported by default, while information messages about normal program execution are not. Options for viewing logged messages were, however, limited to recording them to a terminal or to one or more files, and the requested log verbosity levels could only be set when starting the program. Coming in ParaView 5.9, we have added a graphical user interface to record and view these same logs in a more flexible way. The viewer supports recording and display of log messages at different verbosity levels from specific ParaView processes, and the specific levels of messages to record can be modified at runtime.
The new Log Viewer window (Tools menu -> Log Viewer) enables creation of log viewers for individual ParaView processes in the possible configurations in which ParaView can be run (e.g., GUI client with built-in server, GUI client with remote server, GUI client with remote data server and remote render server). For configurations where server components run as MPI jobs, a log created in this viewer is restricted to a selected rank in the parallel run. Enabling logging per ParaView process makes it practical to perform logging for debugging and performance analysis on single ranks without getting overwhelmed by the log output of very large parallel runs.
As an example, consider a ParaView session with the GUI client and a remote server with two MPI processes. The Log Viewer window with individual logs from the client, server rank 0, and server rank 1 are organized under separate tabs as shown below.
The Log Viewer is split into two sections. Controls for creating and modifying different log recorders are on the left. The actual logs are displayed in the majority of the window on the right. Detailed raw log messages from the selection in the log message table are shown in the bottom right section.
Available logging controls are summarized here.
New Log section
Specifies the ParaView process on which logging should take place. The choice is limited to “Client” in client-only mode, “Client” and “Server” in client/server mode, and “Client”, “Data Server”, an “Render Server” in client/data server/render server mode.
For parallel ParaView server jobs, this specifies the rank on which the log should be created. If the process is not parallel, this control is not shown.
When clicked, this button creates a new log. By default, a log for the client is already set up when the window is opened. Subsequent logs for different ParaView processes will be created under new tabs on the right side of the window. Only one log per process and rank can exist at the same time.
Recorded logs might get very long. The global filter is a wildcard expression that limits what log entries are displayed in all of the log viewers. By default, the expression is empty, and no filtering is performed.
Examples of verbosity levels are ERROR, WARNING, INFO, and TRACE. Most of the time, only errors, warnings, and informational messages are of interest, and the default log reporting is set up to report those items to the terminal from which the process was run (if applicable). Various other components of ParaView are logged at higher verbosity levels, and hence they are not usually shown.
The controls in the Verbosity Settings section enable dynamic changes to the logging verbosity level. One verbosity level is presented for each process in the ParaView configuration (client, server, data server, render server). The logging level for each process can be set through one of the combo boxes presented under the Client Verbosity Level, Server Verbosity Level, Data Server Verbosity Level, and Render Server Verbosity Level controls. Possible verbosity levels are: OFF, ERROR, WARNING, INFO, TRACE, and the numbers 0-9, which represent further log refinement options.
While the controls in the previous section make it possible to specify the verbosity for a given process, the controls in this section make possible changing the logging verbosity level of different categories of messages in ParaView. These categories are:
- Data Movement – messages related to the transfer data from one process to another
- Rendering – messages related to rendering operations
- Application – messages related to ParaView application operations
- Pipeline – messages about ParaView’s pipeline execution model
- Plugins – messages related to plugin loading
Checkboxes next to each of these categories will cause log messages from these categories to be elevated to the currently selected reporting level on each process. Doing so ensures that all such messages are logged by the viewer. Note that the logging level of these messages will be elevated so that they are always recorded. Hence, if you are viewing only messages at verbosity WARNING, then mundane messages normally logged at TRACE level will be marked as warnings to ensure that they are included in the log.
This button updates the log viewers with the most recent log messages appended to the output.
This button clears the logs in all the viewers.
Each log shown on the right side of the Log Viewer window has several columns. By default, only three columns are shown – Verbosity, Time, and Message. Verbosity tells the verbosity level of the message when it was recorded, Time tells when the log message was produced since logging was started (which occurs immediately after process startup), and Message shows the log message. Additional columns are available by clicking the gear icon in the upper right of the Log Viewer window. The Process column indicates on which ParaView process the log message was generated, and the File:line column shows where in the source code the message was logged.
Log messages in ParaView’s logging infrastructure can be nested in other log messages. This nesting is displayed with a tree view in the Message column. When expanded, the nested log messages are displayed on subsequent rows in the log viewer. By default, nested log messages are collapsed in the log viewer. When expanded, an increased indentation level shows that a log message is recorded within the scope of another log entry. Such nesting can be useful to break down and log individual subtasks in a larger task.
Messages can be filtered using wildcard expressions entered into the text entry above the log viewer. The full log message, including nested elements, will be displayed in the text box below the log viewer. This text can be copied and pasted into other programs, and it can be exported to a file by clicking on the Export Log button.
The authors thank the Data Analysis and Assessment Center of the United States Department of Defense High Performance Computing Modernization Program for sponsoring the development of this ParaView feature.