Skip to main content
BuildingBlocks.Logging.Serilog, uygulamayı Serilog’a bağlayan iki ince extension sağlar: host’u Serilog’a yönlendirme ve HTTP request logging middleware’i. Asıl sink/enrich/filter yapılandırması appsettings.json’daki Serilog bölümünden okunur — kod tarafı minimaldir.
Metrik/tracing tarafı (OpenTelemetry, Prometheus) ayrıdır; bkz. Monitoring ve Observability.

Extension’lar

MetotTipAmaç
UseToSerilog()IHostBuilderHost’u Serilog’a yönlendirir (hostBuilder.UseSerilog())
UseSerilogRequestLoggingMiddleware()IApplicationBuilderHTTP request logging + LogEnricher.EnrichFromRequest
public static IHostBuilder UseToSerilog(this IHostBuilder hostBuilder)
{
    hostBuilder.UseSerilog();
    return hostBuilder;
}

public static IApplicationBuilder UseSerilogRequestLoggingMiddleware(this IApplicationBuilder app)
    => app.UseSerilogRequestLogging(opts => opts.EnrichDiagnosticContext = LogEnricher.EnrichFromRequest);
LogEnricher.EnrichFromRequest her istek log’una şu alanları ekler:
AlanKaynak
ClientIPhttpContext.Connection.RemoteIpAddress
UserAgentUser-Agent header
EnvironmentASPNETCORE_ENVIRONMENT

Program.cs yerleşimi

UseToSerilog() host kurulumunda en başta, request logging middleware’i ise pipeline’ın erken bir noktasında çağrılır.
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseToSerilog();           // Serilog'u devreye al
// ... AddInfrastructure / AddApplication ...

var app = builder.Build();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSerilogRequestLoggingMiddleware();   // her HTTP isteğini özetle logla
// ... Authentication / Authorization / MapControllers ...
app.Run();

appsettings — Serilog yapısı

Serilog Serilog.Settings.Configuration ile JSON’dan kurulur. Console (dev), File ve Seq (5341 ingest portu) sink’leri kullanılır; enrich ve gürültü filtreleri burada tanımlanır.
{
  "Serilog": {
    "Using": ["Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Seq"],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft.AspNetCore": "Warning",
        "Microsoft.EntityFrameworkCore": "Warning",
        "MassTransit": "Warning"
      }
    },
    "Enrich": ["FromLogContext", "WithMachineName", "WithThreadId", "WithProcessId"],
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": { "path": "logs/log-.txt", "rollingInterval": "Day", "retainedFileCountLimit": 14 }
      },
      {
        "Name": "Seq",
        "Args": { "serverUrl": "http://seq:5341" }
      }
    ],
    "Filter": [
      {
        "Name": "ByExcluding",
        "Args": {
          "expression": "RequestPath like '/hc%' or RequestPath like '/metrics%' or RequestPath like '/jobs%'"
        }
      }
    ]
  }
}
BölümAmaç
MinimumLevel.OverrideFramework gürültüsünü Warning’e çeker; uygulama log’ları Information kalır
EnrichFromLogContext (scope property’leri), WithMachineName, WithThreadId, WithProcessId
WriteToConsole + günlük rolling File + Seq
Filter.ByExcluding/hc, /metrics, /jobs gibi sağlık/metrik/dashboard yollarını log’dan çıkarır
Dev ortamında Seq UI 5342 portunda açılır (ingest 5341). Yapısal log sayesinde ClientIP = '...' veya RequestPath like '/api/admin%' gibi sorgularla filtreleme yapabilirsiniz.
Hassas veriyi (parola, token, TCKN) log’a yazmayın. Domain value object’leri bu konuda yardımcıdır — örneğin OtpCode.ToString() daima "******" döner.

İlgili

Observability

Seq, Prometheus ve Grafana yığını.

Monitoring

OpenTelemetry metrics ve health gauge.

Operasyon

Ortam değişkenleri ve log yönetimi.

API

Middleware pipeline sırası.