self-hosted error monitor Open the panel

A single occurrence

one whole event: context, attachments, neighbours open the screen

What it is for

One whole event, exactly as it arrived. It is the "show me precisely what happened that time" screen.

What is on it

  • Who: customer, machine, user, operating system.
  • What: class, message, unit and method.
  • When: the instant it happened on the customer's side (ocorrido_em), which is not the same as when it reached meulog (recebido_em).
  • The full stack for this occurrence.
  • The attributes the SDK sent along: any key at all, and every one of them becomes a facet and becomes searchable without anyone declaring it.
  • The evidence: screenshot, bug report file, any attachment that came with the event.

Before the error

When the application sends usage events, the screen lists what the person did in the ten minutes before this occurrence: the same browser session when there is one, otherwise the same user and customer. Each step says how long before the error it happened, and "full timeline" opens the whole day.

Previous and next

The two arrow buttons at the top move within the same error, in time order. "Did it happen the same way last time?" is the first question anyone asks when opening an occurrence, and the answer used to be one trip back to the list away.

The trail

The bottom section shows what the execution left behind, and its title changes with what came in. From an SDK or from madExcept it is a callstack: one frame per line, the guilty one in full ink. From a search index it is usually an execution log — the trail the application wrote while it worked, with a timestamp on every line.

The two are not drawn alike, because they are not the same thing. In a log the order is chronological and not one of calls, and the question it answers is where the time went: the middle column carries the gap since the previous step, and it only shows up once it passes a tenth of a second. Fifty lines where forty-nine take milliseconds and one takes four seconds tell the whole story.

A Delphi stack gets its own drawing, because it is columnar: unit, line and method become three columns, the build address steps aside (it changes on every compile and tells nobody anything), and library frames — Vcl, cx, dx, System — are dimmed. Out of seventy lines, about six tend to be yours, and those are the ones you are looking for. Thread and nested-exception lines become boundaries instead of one more frame.

The structured value drawing takes a value with structure — JSON, XML, a SOAP envelope — and shows it indented instead of on one long line. That was the case for the nested context modern SDKs send and for the envelope tax indexes store: the data was on screen and unreadable.

What meulog decides for you

Which drawing to use. Nobody configures it: each drawing looks at the content and says whether it is its own, and it works on what was already stored. A new format is one file under app/plugins/drawing/, and no screen changes.

What meulog decides for you

This screen has no filter bar and no facets. It is one object's page, and the nine dimensions with counts pushed the reading band 400px down while offering slices that change nothing here. The filter still travels in the links, so "see this error's group" lands on the same slice.