SqlCommandMonitor 1.0.107

Sql Command Monitor

SqlCommandMonitor je NuGet balíček pro snadné sledování a logování všech SQL příkazů (DbCommand) prováděných v aplikacích ASP.NET Core s Entity Framework Core.
Umožňuje zachytávat prováděné SQL příkazy, dobu jejich trvání, počet ovlivněných řádků a související informace o HTTP requestu a volající metodě.

Funkce

  • Zachycení SQL příkazů pro všechny typy DbContext.
  • Logování:
    • Časové razítko (Timestamp)
    • SQL příkaz (SqlCommand)
    • Počet ovlivněných řádků (AffectedRows)
    • Doba vykonání v ms (DurationMs)
    • Request ID (RequestId)
    • HTTP route (HttpRoute) - HTTP metoda + cesta
    • Volající metoda (CallingMethod)
    • Zdrojový soubor:řádek (SourceFileLine)
  • Podpora více DbContextů současně.
  • Middleware pro asociaci SQL příkazů s HTTP requesty.
  • Endpoint pro získání statistik SQL příkazů (volitelná HTTP Basic autentizace).
  • Jednoduchá registrace do DI kontejneru.

Instalace

dotnet add package SqlCommandMonitor

Registrace

builder.Services.AddSqlCommandMonitor(builder.Configuration);

Implementace

builder.Services.AddDbContext<AppDbContext>((sp, options) =>
{
    var interceptor = sp.GetRequiredService<DbCommandMonitorInterceptor>();

    options.UseSqlServer(builder.Configuration.GetConnectionString("default), opts =>
    {
        opts.MigrationsHistoryTable("MigrationHistory_App");
    });

    options.AddInterceptors(interceptor);
});

Přidání middleware a endpointu do pipeline

Middleware by měl být registrován po middlewarech, které mohou spouštět SQL příkazy (např. endpoint), aby bylo možné správně asociovat SQL příkazy s HTTP requestem:

app.UseSqlCommandMonitor();

Tento middleware automaticky přidá endpoint pro získání statistik SQL příkazů:

GET /sql-command-stats
  • Endpoint vrací data ve formátu JSON.

  • Podporuje volitelnou HTTP Basic autentizaci.

  • Pokud je v konfiguraci nastavena sekce BasicAuth, endpoint je chráněn.

  • Pokud BasicAuth není nastavena, endpoint je veřejně dostupný.

Příklad statistik SQL příkazů

[
  {
    "Timestamp": "2026-01-06T14:22:10.123Z",
    "RequestId": "26bf23be-105e-427a-a87a-66ac4c6cb24c",
    "HttpRoute": "GET /api/notes/{id}",
    "CallingMethod": "GetNoteById",
    "SourceFileLine": "NoteRepository.cs:45",
    "AffectedRows": null,
    "readRows": 1,
    "DurationMs": 12,
    "SqlCommand": "SELECT [n].[Id], [n].[Title], [n].[Content] FROM [Notes] AS [n] WHERE [n].[Id] = @__id_0"
  },
  {
    "Timestamp": "2026-01-06T14:22:18.456Z",
    "RequestId": "ea6f450c-20d5-474c-9690-cc6f91547e87",
    "HttpRoute": "PUT /api/notes/{id}",
    "CallingMethod": "UpdateNote",
    "SourceFileLine": "NoteRepository.cs:78",
    "AffectedRows": 1,
    "readRows": null,
    "DurationMs": 8,
    "SqlCommand": "UPDATE [Notes] SET [Title] = @p0, [Content] = @p1 WHERE [Id] = @p2"
  }
]

Konfigurace

Možnosti monitorování SQL příkazů lze nakonfigurovat pomocí SqlCommandMonitorOptions při registraci služby.

{
  "SqlCommandMonitorOptions": {
    "Enabled": true,
    "MaxBufferSize": 1000,
    "MinimumLogLevel": "Warning",
    "WarningThresholdMs": 50,
    "BasicAuth": {
      "Username": "user",
      "Password": "password"
    }
  }
}
  • Enabled – zapnutí / vypnutí monitorování
  • MaxBufferSize – maximální počet uložených záznamů
  • MinimumLogLevel – minimální úroveň logování
  • WarningThresholdMs – prahová hodnota v milisekundách pro logování SQL příkazů jako Warning (příkazy s kratší dobou trvání jsou logovány jako Information)
  • BasicAuth – volitelná sekce pro ochranu endpointu přihlašovacími údaji

Pokud není konfigurace uvedena v appsettings.json, použijí se následující výchozí hodnoty:

  • Enabled – true
  • MaxBufferSize – 1000
  • MinimumLogLevel – Information
  • WarningThresholdMs – 50
  • BasicAuth – null (ochrana endpointů je vypnuta)

Tok zpracování SQL příkazů

DbCommandMonitorInterceptor
        │
        ▼
     MonitorData
        │
        ├──► MonitorDataBuffer.Add(...)  (vždy → nejstarší záznamy jsou zahazovány dle MaxBufferSize)
        │                                
        │
        └──► MonitorDataLogger.Log(...)  (filtrováno → MinimumLogLevel, WarningThresholdMs)
                                          
                                          
  • Každý zachycený SQL příkaz je vždy přidán do bufferu.

  • Při překročení MaxBufferSize jsou automaticky odstraněny nejstarší záznamy.

  • Filtrace se aplikuje výhradně na logování.

No packages depend on SqlCommandMonitor.

Version Downloads Last updated
1.0.128 1 01/24/2026
1.0.127 1 01/24/2026
1.0.126 1 01/24/2026
1.0.125 1 01/24/2026
1.0.124 1 01/24/2026
1.0.123 0 01/24/2026
1.0.122 0 01/24/2026
1.0.121 1 01/24/2026
1.0.120 1 01/24/2026
1.0.119 1 01/24/2026
1.0.118 2 01/24/2026
1.0.117 1 01/24/2026
1.0.116 2 01/24/2026
1.0.115 1 01/24/2026
1.0.114 1 01/24/2026
1.0.113 0 01/24/2026
1.0.112 1 01/24/2026
1.0.111 1 01/24/2026
1.0.110 1 01/24/2026
1.0.109 1 01/24/2026
1.0.108 1 01/24/2026
1.0.107 0 01/24/2026
1.0.106 0 01/24/2026
1.0.104 1 01/24/2026
1.0.103 0 01/24/2026
1.0.102 1 01/24/2026
1.0.101 0 01/24/2026
1.0.99 1 01/24/2026
1.0.98 1 01/24/2026
1.0.97 0 01/24/2026
1.0.96 1 01/24/2026
1.0.95 1 01/24/2026
1.0.94 1 01/24/2026
1.0.93 0 01/24/2026
1.0.92 1 01/23/2026
1.0.91 1 01/23/2026
1.0.90 1 01/23/2026
1.0.89 1 01/23/2026
1.0.88 1 01/23/2026
1.0.87 1 01/23/2026
1.0.86 1 01/23/2026
1.0.85 0 01/23/2026
1.0.84 1 01/23/2026
1.0.83 0 01/23/2026
1.0.82 1 01/14/2026
1.0.81 1 01/13/2026
1.0.80 1 01/13/2026
1.0.79 0 01/13/2026
1.0.78 1 01/13/2026
1.0.77 1 01/13/2026
1.0.76 1 01/13/2026
1.0.75 1 01/13/2026
1.0.74 1 01/13/2026
1.0.73 1 01/13/2026
1.0.72 1 01/13/2026
1.0.71 1 01/13/2026
1.0.70 1 01/13/2026
1.0.69 1 01/11/2026
1.0.68 1 01/11/2026
1.0.67 1 01/11/2026
1.0.66 1 01/11/2026
1.0.65 1 01/11/2026
1.0.64 1 01/11/2026
1.0.63 1 01/11/2026
1.0.62 1 01/11/2026
1.0.61 1 01/11/2026
1.0.60 1 01/11/2026
1.0.59 1 01/11/2026
1.0.58 1 01/11/2026
1.0.57 1 01/11/2026
1.0.56 1 01/11/2026
1.0.55 1 01/11/2026
1.0.54 1 01/11/2026
1.0.53 1 01/11/2026
1.0.52 1 01/11/2026
1.0.51 1 01/11/2026
1.0.50 1 01/11/2026
1.0.49 1 01/11/2026
1.0.48 1 01/11/2026
1.0.47 2 01/11/2026
1.0.46 1 01/11/2026
1.0.45 2 01/10/2026
1.0.44 1 01/10/2026
1.0.43 0 01/10/2026
1.0.42 2 01/10/2026
1.0.41 1 01/10/2026
1.0.40 1 01/10/2026
1.0.39 1 01/10/2026
1.0.38 1 01/10/2026
1.0.37 1 01/10/2026
1.0.35 1 01/10/2026
1.0.34 1 01/10/2026
1.0.33 1 01/10/2026
1.0.32 0 01/10/2026
1.0.31 1 01/09/2026
1.0.30 1 01/09/2026
1.0.29 1 01/09/2026
1.0.28 1 01/09/2026
1.0.27 0 01/09/2026
1.0.26 1 01/09/2026
1.0.25 1 01/09/2026
1.0.24 1 01/09/2026
1.0.23 1 01/09/2026
1.0.22 1 01/09/2026
1.0.21 1 01/09/2026
1.0.20 1 01/08/2026
1.0.19 1 01/08/2026
1.0.18 1 01/08/2026
1.0.17 1 01/08/2026
1.0.16 1 01/08/2026
1.0.15 1 01/08/2026
1.0.14 1 01/08/2026
1.0.13 1 01/08/2026
1.0.12 1 01/08/2026
1.0.11 1 01/08/2026
1.0.10 1 01/08/2026
1.0.9 1 01/08/2026
1.0.8 1 01/07/2026
1.0.7 1 01/07/2026
1.0.6 1 01/06/2026
1.0.5 1 01/06/2026
1.0.4 1 01/06/2026
1.0.3 1 01/06/2026
1.0.2 1 01/06/2026
1.0.1 0 01/06/2026