Management Interface Page: Debug

Description

This page allows display debug information in real time.

The concepts of debug and logs serve distinct purposes despite both providing real-time information.

Logs are structured, persistent records that capture events, errors, and operational details across the application lifecycle, primarily for auditability and retrospective analysis.

By contrast, debug outputs are transient and ad hoc, intended to inspect specific variables or internal states for immediate troubleshooting and development insights without retaining a permanent record. Unlike logs, which follow a standardized format and scope, debug outputs are flexible, providing tailored runtime information to understand and resolve issues dynamically without interfering with the core logging system.

Screenshot

Start / Stop

There are 2 actions available in the top right part of the page: Start and Stop.

Screenshot

When you click on the Start button, you can choose a filter to only return relevant debug information, this is the pub-sub capture filter (the hashtag # means capture everything) that applies to the debug name tag.

Screenshot

Once the live capture is enabled, the connection indicator will be adjusted in the top left part of the page.

Screenshot

Debug Details

The main central region of the page will display debug messages as they are generated by the system. Each debug message is displayed as JSON with the following structure:

{
	"stack": [],
	"values": []
}

The stack component will contain the complete stack trace at the location of the debug point.. The values component will list the string representation of all debug values.

Debug points are set in the code using the Debug.debug() method. It accepts multiple parameters. The first parameter is the debug name tag that can be used by the display filter. Any other parameter are variables that will be printed with their current value.

Example:

Debug.debug("test", foo, "bar", 42);
{
	"stack": [
		"_m_1642602896957700_//_m_1642602896957700_.Custom.lambda$get$0(Custom.java:13)",
		...
	],
	"values": [
		{"type": "Object", "name": "foo"},
		"bar",
		42
	]
}