41 lines
1.5 KiB
Markdown
41 lines
1.5 KiB
Markdown
|
|
# Elsa Diagnostics Structured Logs SQLite Persistence
|
||
|
|
|
||
|
|
This package persists diagnostics structured log events to SQLite using the shared relational structured log store.
|
||
|
|
|
||
|
|
## Configure
|
||
|
|
|
||
|
|
```csharp
|
||
|
|
services.AddElsa(elsa =>
|
||
|
|
{
|
||
|
|
elsa.UseStructuredLogs(structuredLogs =>
|
||
|
|
{
|
||
|
|
structuredLogs.UseSqliteStorage("Data Source=elsa-structured-logs.db", sqlite =>
|
||
|
|
{
|
||
|
|
sqlite.RunMigrationsOnStartup = true;
|
||
|
|
sqlite.Relational.WriteQueue.Capacity = 10_000;
|
||
|
|
sqlite.Relational.WriteQueue.BatchSize = 100;
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
```
|
||
|
|
|
||
|
|
SQLite migrations run on startup by default. Set `RunMigrationsOnStartup` to `false` when migrations are handled by deployment tooling.
|
||
|
|
|
||
|
|
## Retention
|
||
|
|
|
||
|
|
SQLite storage does not delete persisted log entries by default. Configure retention explicitly:
|
||
|
|
|
||
|
|
```csharp
|
||
|
|
sqlite.Relational.Retention.MaxAge = TimeSpan.FromDays(14);
|
||
|
|
sqlite.Relational.Retention.MaxRows = 250_000;
|
||
|
|
sqlite.Relational.Retention.CleanupOnStartup = true;
|
||
|
|
```
|
||
|
|
|
||
|
|
## Write Queue
|
||
|
|
|
||
|
|
Writes are buffered through a bounded queue. Graceful shutdown flushes queued events where possible. If the queue is full, newest writes are dropped and `IStructuredLogWriteBuffer.DroppedWriteCount` reports the dropped-write count.
|
||
|
|
|
||
|
|
## Provider Boundary
|
||
|
|
|
||
|
|
SQLite-specific services live in this package: connection factory, SQL dialect, FluentMigrator runner wiring, and startup migration/cleanup service. Shared relational behavior lives in `Elsa.Diagnostics.StructuredLogs.Persistence.Relational`.
|