Getting Started
Architecture
Transports
Persistence
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Samples

Startup diagnostics

Component: NServiceBus
NuGet Package: NServiceBus (9.x)
This document does not apply to Azure Function hosts. For Azure Function hosts, see Azure Function In-process diagnostics or Azure Function Isolated Worker diagnostics.

To make troubleshooting easier, diagnostic information is collected during endpoint startup and written to a .diagnostics sub-folder in the host output directory.

By default, the output directory is called AppDomain.CurrentDomain.BaseDirectory, except for web applications where App_Data is used instead.

To change the output path:

endpointConfiguration.SetDiagnosticsPath("myCustomPath");

At every endpoint startup the current diagnostics will be written to {endpointName}-configuration.txt. If possible, attach this file to support requests.

The structure and format of the data produced should not be considered stable or parsable. Nodes may be added, removed, or moved in minor and patch versions.

Sample content

Sample partial content of the startup diagnostics (formatted for readability):

{
  "Container": {
    "Type": "internal"
  },
  "Endpoint": {
    "Name": "StartUpDiagnosticsWriter",
    "SendOnly": false,
    "NServiceBusVersion": "8.0.0"
  },
  "Features": [
    {
      "Name": "NServiceBus.ReceiveStatisticsFeature",
      "EnabledByDefault": true,
      "Active": true,
      "PrerequisiteStatus": {
        "IsSatisfied": true,
        "Reasons": []
      },
      "Dependencies": [],
      "Version": "8.0.0",
...

Writing to other targets

To take full control of how diagnostics are written:

endpointConfiguration.CustomDiagnosticsWriter(
    (diagnostics, ct) =>
    {
        //custom logic to write data
        return Task.CompletedTask;
    });

Adding startup diagnostics sections

To extend the startup diagnostics with custom sections:

settings.AddStartupDiagnosticsSection(
    sectionName: "MySection",
    section: new
    {
        SomeSetting = "some data",
        SomeOtherSetting = 10
    });

Settings can be accessed from a feature or via the endpoint configuration.