ASP.NET Core uygulamalarında logging (loglama) ve konfigürasyon yönetimi, uygulamanın izlenebilirliğini ve yönetilebilirliğini artıran kritik unsurlardır.
Bu bölümde:
- Logging (Loglama) nedir?
- ASP.NET Core’da yerleşik loglama nasıl kullanılır?
- appsettings.json ve ortam değişkenleri ile yapılandırma yönetimi
- Özel loglama sağlayıcıları (Serilog, NLog)
- Pratik örnekler ve kullanım senaryoları
konularını detaylı bir şekilde inceleyeceğiz.
1. Logging (Loglama) Nedir?
Loglama, uygulamanın çalışması sırasında hata, uyarı, bilgi ve hata ayıklama mesajlarının kayıt altına alınması sürecidir.
✔ Hataları hızlı tespit etmeye yardımcı olur.
✔ Uygulamanın performansını izlemeyi sağlar.
✔ Hangi işlemlerin gerçekleştiğini kayıt altında tutar.
1.1. Log Seviyeleri
ASP.NET Core’da yerleşik olarak aşağıdaki log seviyeleri desteklenir:
| Seviye | Açıklama |
|---|---|
| Trace | En düşük seviyeli detaylı loglar |
| Debug | Debug modunda hata ayıklama logları |
| Information | Genel bilgi amaçlı loglar |
| Warning | Potansiyel risk içeren durumlar |
| Error | Uygulamanın hata verdiği durumlar |
| Critical | Kritik hatalar (örneğin sistem çökmesi) |
📌 Genellikle “Information” ve “Warning” seviyeleri varsayılan olarak etkinleştirilir.
2. ASP.NET Core’da Yerleşik Loglama
ASP.NET Core, ILogger arayüzü üzerinden yerleşik loglama desteği sunar.
2.1. Temel Kullanım (Console Loglama)
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
var logger = app.Services.GetRequiredService<ILogger<Program>>();
app.Use(async (context, next) =>
{
logger.LogInformation("Yeni bir HTTP isteği alındı: {Path}", context.Request.Path);
await next();
});
app.MapGet("/", () => "Merhaba, Logging!");
app.Run();C#📌 Bu kod, her HTTP isteğini konsola loglar.
Örnek Çıktı (Console):
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Yeni bir HTTP isteği alındı: /C#2.2. Controller İçinde ILogger Kullanımı
Controller’larda ILogger bağımlılık enjeksiyonu (DI) ile kullanılabilir:
[ApiController]
[Route("api/[controller]")]
public class HomeController : ControllerBase
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
[HttpGet]
public IActionResult Get()
{
_logger.LogInformation("HomeController -> Get() çağrıldı.");
return Ok("Loglama başarılı!");
}
}C#📌 API çağrıldığında şu log mesajı üretilir:
info: HomeController[0]
HomeController -> Get() çağrıldı.C#3. appsettings.json ile Konfigürasyon Yönetimi
ASP.NET Core uygulamalarında appsettings.json dosyası, uygulamanın konfigürasyon ayarlarını tutar.
3.1. appsettings.json Yapısı
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning"
}
},
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=TestDB;User Id=sa;Password=yourpassword;"
},
"AppSettings": {
"ApplicationName": "My ASP.NET Core App",
"EnableFeatureX": true
}
}C#3.2. appsettings.json’dan Değer Okuma
Konfigürasyon dosyasındaki değerleri okumak için IConfiguration kullanılır.
📌 Controller içinde kullanım:
[ApiController]
[Route("api/[controller]")]
public class ConfigController : ControllerBase
{
private readonly IConfiguration _config;
public ConfigController(IConfiguration config)
{
_config = config;
}
[HttpGet]
public IActionResult GetAppSettings()
{
var appName = _config["AppSettings:ApplicationName"];
return Ok($"Uygulama Adı: {appName}");
}
}C#Uygulama Adı: My ASP.NET Core AppC#📌 Bağlantı dizesi okumak için:
var connectionString = _config.GetConnectionString("DefaultConnection");C#4. Ortam Değişkenleri (Environment Variables) ile Konfigürasyon
Bazı ayarları appsettings.json yerine ortam değişkenleriyle yönetmek daha güvenlidir.
📌 Örneğin: Veritabanı şifresi .json dosyasında saklanmak yerine bir Environment Variable (Çevresel Değişken) olarak ayarlanabilir.
4.1. Ortam Değişkeni Tanımlama (Linux/Mac)
export ConnectionStrings__DefaultConnection="Server=myserver;Database=prodDB;User Id=sa;Password=securePassword"C#📌 Windows’ta PowerShell kullanarak ayarlayabilirsiniz:
$env:ConnectionStrings__DefaultConnection="Server=myserver;Database=prodDB;User Id=sa;Password=securePassword"C#📌 Ortam değişkenlerini okumak için:
var connectionString = Environment.GetEnvironmentVariable("ConnectionStrings__DefaultConnection");C#5. Özel Loglama Kütüphaneleri (Serilog, NLog)
ASP.NET Core’da yerleşik loglama dışında, gelişmiş Serilog ve NLog gibi loglama kütüphaneleri kullanılabilir.
5.1. Serilog Kullanımı
Serilog, dosyaya, veritabanına veya üçüncü taraf log sistemlerine log kaydı almayı sağlar.
📌 Serilog’u projeye eklemek için:
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.FileC#📌 Serilog konfigürasyonu (Program.cs)
using Serilog;
var builder = WebApplication.CreateBuilder(args);
// Serilog yapılandırması
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/app_log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
builder.Host.UseSerilog();
var app = builder.Build();
app.Run();C#📌 Dosyaya log kaydetme (HomeController.cs)
[ApiController]
[Route("api/[controller]")]
public class HomeController : ControllerBase
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
[HttpGet]
public IActionResult Get()
{
_logger.LogInformation("Serilog ile log kaydedildi.");
return Ok("Log başarıyla kaydedildi!");
}
}C#✅ Loglar logs/app_log.txt dosyasına yazılacaktır.