SqlCommandMonitor 1.0.89
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)
- Časové razítko (
- 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ů jakoWarning(příkazy s kratší dobou trvání jsou logovány jakoInformation)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– trueMaxBufferSize– 1000MinimumLogLevel– InformationWarningThresholdMs– 50BasicAuth– 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í
MaxBufferSizejsou automaticky odstraněny nejstarší záznamy.Filtrace se aplikuje výhradně na logování.
No packages depend on SqlCommandMonitor.
.NET 8.0
.NET 10.0
- Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore (>= 10.0.2)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.2)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.2)
| Version | Downloads | Last updated |
|---|---|---|
| 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 | 1 | 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 |