dotnet-cqrs/docs/observability/logging/README.md

92 lines
2.2 KiB
Markdown

# Structured Logging
High-performance structured logging with correlation IDs.
## Overview
Svrnty.CQRS provides comprehensive structured logging:
- **LoggerMessage Source Generators** - Zero-allocation logging
- **Correlation IDs** - Distributed tracing
- **Event ID Ranges** - Categorized log events
- **Structured Data** - Queryable log parameters
## Quick Start
```csharp
using Svrnty.CQRS.Events.Logging;
using Serilog;
// Configure Serilog
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.Seq("http://localhost:5341")
.CreateLogger();
builder.Host.UseSerilog();
// Use correlation context
using (CorrelationContext.Begin(correlationId))
{
_logger.LogEventPublished(eventId, eventType, streamName, CorrelationContext.Current);
await ProcessEventAsync(@event);
_logger.LogEventConsumed(eventId, eventType, subscriptionId, consumerId, elapsed);
}
```
## Log Event ID Ranges
```csharp
// 1000-1999: Stream lifecycle
EventIds.StreamCreated = 1001
EventIds.StreamDeleted = 1002
// 2000-2999: Subscription lifecycle
EventIds.SubscriptionRegistered = 2001
EventIds.SubscriptionCancelled = 2002
// 3000-3999: Consumer lifecycle
EventIds.ConsumerConnected = 3001
EventIds.ConsumerLagging = 3004
EventIds.ConsumerStalled = 3005
// 4000-4999: Event publishing
EventIds.EventPublished = 4001
EventIds.EventPublishFailed = 4002
// 5000-5999: Event consumption
EventIds.EventConsumed = 5001
EventIds.EventRetry = 5002
EventIds.EventDeadLettered = 5003
```
## Correlation IDs
```csharp
public class CorrelationContext
{
private static readonly AsyncLocal<string?> _correlationId = new();
public static string? Current => _correlationId.Value;
public static IDisposable Begin(string correlationId)
{
_correlationId.Value = correlationId;
return new CorrelationScope();
}
private class CorrelationScope : IDisposable
{
public void Dispose() => _correlationId.Value = null;
}
}
```
## See Also
- [Observability Overview](../README.md)
- [Correlation IDs](correlation-ids.md)
- [Event ID Ranges](event-id-ranges.md)
- [Serilog Integration](serilog-integration.md)