Logging
Emit one structured ILogger message per executed SQL statement, with the SQL text, parameters and duration. Parameter value capture is opt-in and redactable to protect PII and secrets.
How logging is wired
When you use the database context, the ILogger is taken from DI automatically, with no per-call wiring. For code paths that execute SQL through the static API (or to set logging globally), configure the ambient diagnostics once at startup:
var app = builder.Build();
SocigyDbDiagnostics.Configure(o =>
{
o.LoggerFactory = app.Services.GetRequiredService<ILoggerFactory>();
o.LogLevel = LogLevel.Information; // default: Debug
o.CaptureCommandText = true; // default: true
o.CaptureParameterValues = false; // default: false (see below)
});Messages are logged to the category Socigy.OpenSource.DB.Sql and include the operation, duration in milliseconds, row count, SQL text and parameters as structured properties.
Parameter value capture is opt-in
By default only parameter names and DB types are logged, never the values, because values often contain PII or secrets (passwords, tokens, emails). This mirrors EF Core's EnableSensitiveDataLogging.
Enable values explicitly, ideally with a redaction hook and length cap:
SocigyDbDiagnostics.Configure(o =>
{
o.LoggerFactory = loggerFactory;
o.CaptureParameterValues = true; // turn values on (non-prod / with redaction)
o.MaxParameterValueLength = 256; // truncate long values (default 256)
o.RedactParameter = (name, value) =>
name.Contains("password", StringComparison.OrdinalIgnoreCase) ? "***" : value?.ToString();
});CaptureParameterValues writes raw parameter values to your logs and to the db.query.parameters span tag. Only do this in trusted environments and prefer a RedactParameter hook.Options reference
| Option | Default | Meaning |
|---|---|---|
LoggerFactory |
null |
Source of the logger. null disables logging (tracing/metrics unaffected). |
CaptureCommandText |
true |
Include the SQL text in spans and logs. |
CaptureParameterValues |
false |
Include parameter values (sensitive). |
MaxParameterValueLength |
256 |
Per-value truncation length. |
LogLevel |
Debug |
Level of the per-command message. |
RedactParameter |
null |
(name, value) => masked hook, applied when values are captured. |
DbDiagnosticsContext from DI, which takes precedence over the ambient SocigyDbDiagnostics options for work run through that context.