MillerByte.Logging.Api provides extensive configuration options to customize logging behavior, performance, and security settings.
MongoDB Connection
builder.Services.AddApiLogging(builder.Configuration, options =>
{
options.ConnectionString = "mongodb://localhost:27017";
options.DatabaseName = "ApiLogs";
options.SessionsCollectionName = "LoginSessions";
options.ActionsCollectionName = "ApiActions";
});Multi-Database Support (v1.2.0+)
Route specific endpoints to different databases or collections for multi-tenant scenarios, compliance requirements, or different retention policies.
Write Routing
Use the ApiLogging attribute to route writes to different databases:
// Route to tenant-specific database
[ApiLogging(DatabaseName = "logs-tenant-premium")]
public class PremiumController : ControllerBase { }
// Route to audit database for critical operations
[HttpPost("payment")]
[ApiLogging(DatabaseName = "audit-logs", CollectionName = "payment-actions")]
public IActionResult ProcessPayment() => Ok();Read Queries
Query from different databases using IApiLoggingQueryService:
// Query from default database
var defaultSessions = await _queryService.GetSessionsAsync(parameters);
// Query from tenant-specific database
var premiumSessions = await _queryService.GetSessionsAsync(
parameters,
databaseName: "logs-tenant-premium",
collectionName: "sessions");
// Query from audit database
var auditActions = await _queryService.GetActionsAsync(
parameters,
databaseName: "audit-logs",
collectionName: "payment-actions");Automatic Routing
The background service automatically groups and routes actions to the correct database and collection. No additional configuration needed - just specify the database/collection names in the attribute or query parameters.
Common Use Cases
- Multi-Tenancy: Separate databases per tenant for data isolation and independent scaling
- Compliance: Store PCI/HIPAA data in separate, secured databases with different access controls
- Audit Logs: Critical operations in immutable audit databases with long retention
- Performance Tiers: Premium customers get dedicated infrastructure with better performance
- Retention Policies: Different databases with different backup schedules and retention rules
- Geographic Distribution: Route logs to region-specific databases for compliance
Background Processing
Control how logs are batched and processed:
options.BatchSize = 100; // Logs per batch options.BatchIntervalMs = 500; // Batch interval in ms options.ChannelCapacity = 10000; // Max queued logs options.UseBackgroundQueue = true; // Enable async processing
Session Strategy
Configure how user sessions are identified and tracked:
options.SessionStrategy = SessionStrategy.Hybrid;
options.SessionInactivityTimeoutMinutes = 30;
options.SessionCleanupIntervalMinutes = 60;
options.SessionLookupCacheEnabled = true;
options.SessionLookupCacheMinutes = 2;
// User identification claim types
options.UserIdClaimTypes = new List<string>
{
ClaimTypes.NameIdentifier,
"sub",
"user_id"
};
// Allow anonymous sessions (optional)
options.AllowAnonymousSessions = false;
options.AnonymousUserIdPrefix = "anonymous-";Data Capture
Control what data gets logged:
options.LogRequestBody = true; options.LogResponseBody = true; options.LogHeaders = true; options.IncludeGetRequestLogs = false; // Skip GET requests options.MaxBodySizeBytes = 1048576; // 1MB max body size options.CaptureExceptions = true; options.CaptureUserClaims = true; options.EnableResponseCapture = true;
Security & Sanitization
Configure sensitive data filtering:
options.EnableDataSanitization = true;
options.SanitizeStackTracesInProduction = true;
options.SensitiveFieldNames = new List<string>
{
"password", "token", "authorization",
"apiKey", "api_key", "secret",
"creditCard", "credit_card", "ssn",
"pin", "cvv", "bearer"
};Performance & Scaling
Optimize for high-traffic scenarios:
// Sample only 10% of requests options.SamplingRate = 0.1; // Always log errors regardless of sampling options.AlwaysLogErrors = true; // Rate limit per session options.MaxActionsPerSessionPerMinute = 1000;
OpenTelemetry Integration
options.EnableOpenTelemetry = true; options.EnrichSpansWithPayload = false; options.ActivitySourceName = "MillerByte.Logging.Api";
Resilience Settings
Configure retry and circuit breaker behavior:
options.RetryAttempts = 3; options.CircuitBreakerFailureThreshold = 5; options.CircuitBreakerDurationSeconds = 60; // Fallback to file logging when MongoDB is unavailable options.EnableFallbackLogging = true; options.FallbackLogPath = "./logs/api-logging-fallback";
MongoDB Advanced Settings
Fine-tune MongoDB connection behavior:
// Transaction support (requires replica set) options.UseTransactions = false; // Read preference for queries options.ReadPreference = ReadPreference.Primary; // Options: Primary, Secondary, SecondaryPreferred, PrimaryPreferred, Nearest // Write concern for durability options.WriteConcern = WriteConcern.W1; // Options: W1, WMajority, Acknowledged, Unacknowledged
Multi-tenancy & Environment
options.TenantIdClaimType = "tenantId"; options.EnvironmentName = "Production"; options.ApiVersion = "v1.0";
Feature Flags
Enable or disable optional features:
builder.Services.AddApiLogging(
builder.Configuration,
configureOptions: null,
configureFeatures: features =>
{
features.EnableMetrics = true;
features.EnableHealthChecks = true;
features.EnableOpenTelemetry = true;
});Full Example
builder.Services.AddApiLogging(builder.Configuration, options =>
{
// Performance
options.SamplingRate = 0.5; // Log 50% of requests
options.BatchSize = 200;
// Security
options.EnableDataSanitization = true;
options.SensitiveFieldNames.Add("myCustomSecret");
// Session
options.SessionInactivityTimeoutMinutes = 60;
options.AllowAnonymousSessions = true;
// Data capture
options.LogResponseBody = true;
options.MaxBodySizeBytes = 2097152; // 2MB
// Resilience
options.EnableFallbackLogging = true;
options.RetryAttempts = 5;
});