The viewer is ultimately what is used to download log messages from message servers and display them to the user. It supports concurrent connections over TCP/IP, multiple queries with very flexible display capabilities, and very powerful inclusive- or exclusive-based filter functionality.
Messages, along with selectors, configurations, queries, connections, and message keys are all saved by the viewer in files called workspaces. While the viewer allows only one open workspace at a time, it does of course support working with multiple workspaces serially. This is useful for people who are working on more than one project or on diverse aspects of a single project and need to keep things separated. This could be a developer working on two projects or maybe different versions of the same one (writing the new while maintaining the old), someone at the help desk that supports more than one system, or someone who does regression testing and has a dozen workspaces corresponding to a dozen products.
Receiving log messages
Log messages are downloaded from message servers via TCP/IP connections. The same protocol is used whether connecting locally to the server running on the same computer or remotely over the Internet, so it literally makes no difference where the message server is located. Connections can be activated one at a time or concurrently and can be opened and closed repeatedly or left active persistently. Note that the servers also support concurrent connections, so leaving a connection active will not preclude someone else from connecting.
Connections are created, edited, and de/activated in the Connections dialog and may also be activated from the MRU list on the Connect menu. Workspaces are created with a standard connection named ‘Local’ that is appropriately configured to connect to the local server running on the same machine as the viewer.
After a connection is activated, its filter along with the message keys in the workspace are uploaded to the server so it can determine which messages may be downloaded by the viewer. It should be noted that servers on active connections are not automatically advised of filter changes or of the addition or removal of message key; to effect the change the connection must be bounced (disconnected and reconnected).
Once the upload of the filter and message key is completed, any messages that have arrived at the server since the last connection will be downloaded to the viewer. From this point forward, messages will be automatically downloaded from the server(s) to the viewer(s) as the server receives them. Each time messages are downloaded over the connection, a counter is updated so that when the connection is closed and reopened, downloading picks up where it left off. Messages are all received into a single global pool within the workspace regardless of which servers they come from and which connections they are received on. Once received, any open queries are updated appropriately. If there are no open queries then the messages are simply saved in the workspace for later viewing.
Viewing log messages
A query is a view on the collection of log messages within the workspace. It has filter and display settings which are configurable through the Filter and Display Settings dialogs respectively. The filter restricts the view to any desired subset of messages in the workspace while the display settings allow for viewing those messages in whatever manner is most suitable. Fields may be hidden or displayed, displayed in any order, and sorted in any order. All three time fields may be formatted for display in any of more than two dozen predefined formats or in user defined formats. Queries also support marking and bookmarking for visual highlighting and navigation as well as control over automatic updating via the auto-refresh, auto-sort, and auto-delete settings. Finally, there are also global query display options in the User Preferences dialog; most notable being the option to display full paths for the three file name fields (process name, module name, and source file name).
The viewer allows multiple queries to be open at the same time; each with their own filter and display parameters. This provides for very flexible and effective techniques for viewing log messages in more complex environments. For instance, in a system with multiple clients and servers all the client activity could be viewed in one query with all the server activity in another. Messages could also be separated into specific detail views like connectivity oriented messages from client/server pairs or transaction oriented filtering could be used to isolate messages corresponding to a single transaction per query.
Connections and queries both use filters to control which log messages are downloaded and displayed. Filters ultimately use selectors to tag log messages for subsequent inclusion or exclusion. Selectors simply determine if a log message belongs to a given named set like “Connectivity Server”, “Pre-upgrade”, “Client side”, or “Server side”. Because of the generality of their nature, selectors are global to the entire workspace and can often be used in more than one filter.