Exception Logging¶
Exception logging, bir uygulamada meydana gelen hataları anlamak ve düzeltmek için hayati önem taşır. Ancak, kötü yapılandırılmış veya yetersiz logging stratejileri, hata ayıklamayı zorlaştırabilir.
1. Hataların Günlüğe Kaydedilmemesi¶
❌ Yanlış Kullanım: Hataları yalnızca konsola yazdırmak.
try
{
// İşlem
}
catch (Exception ex)
{
Console.WriteLine($"Hata: {ex.Message}");
}
✅ İdeal Kullanım: Günlükleme framework’leri ile hataları detaylı şekilde kaydedin.
var logger = LoggerFactory.Create(builder => builder.AddConsole()).CreateLogger("AppLogger");
try
{
// İşlem
}
catch (Exception ex)
{
logger.LogError(ex, "Bir hata oluştu.");
}
2. Yetersiz Hata Mesajları¶
❌ Yanlış Kullanım: Hataların bağlamını (context) belirtmemek.
catch (Exception ex)
{
logger.LogError(ex.Message); // Bağlam eksik
}
✅ İdeal Kullanım: Hata bağlamını açıkça belirterek daha fazla bilgi sağlayın.
catch (Exception ex)
{
logger.LogError(ex, "Veritabanı işlemi sırasında bir hata oluştu.");
}
3. Global Exception Logging’i Atlamak¶
❌ Yanlış Kullanım: Global hata yönetimini ve günlüklemeyi ihmal etmek.
app.MapGet("/", () => throw new Exception("Hata!")); // Global yönetim yok
✅ İdeal Kullanım: Global exception handler ile tüm hataları yakalayın.
app.UseExceptionHandler("/error");
app.Map("/error", (HttpContext context) =>
{
var exception = context.Features.Get<IExceptionHandlerFeature>()?.Error;
logger.LogError(exception, "Global bir hata yakalandı.");
return Results.Problem(detail: exception?.Message, statusCode: 500);
});
4. Hataların Tekrar Edilerek Kaydedilmesi¶
❌ Yanlış Kullanım: Aynı hatayı birden fazla kez kaydetmek.
catch (Exception ex)
{
logger.LogError(ex, "Hata!");
throw; // Yeniden kaydedilir.
}
✅ İdeal Kullanım: Hataları yalnızca bir kez kaydedin.
catch (Exception ex) when (LogException(ex))
{
throw;
}
static bool LogException(Exception ex)
{
logger.LogError(ex, "Hata kaydedildi.");
return false;
}
5. Hassas Bilgilerin Günlüğe Kaydedilmesi¶
❌ Yanlış Kullanım: Kullanıcı verilerini veya hassas bilgileri loglamak.
catch (Exception ex)
{
logger.LogError($"Hata: {ex.Message}, Kullanıcı: {user.Password}"); // Güvenlik açığı
}
✅ İdeal Kullanım: Hassas bilgileri hariç tutun.
catch (Exception ex)
{
logger.LogError(ex, "Hata oluştu.");
}
6. Logging Seviyelerini Yanlış Kullanmak¶
❌ Yanlış Kullanım: Tüm hataları aynı seviyede kaydetmek.
logger.LogError("Hata!"); // Her şey Error olarak loglanmış.
✅ İdeal Kullanım: Doğru log seviyelerini kullanın.
logger.LogInformation("Bilgilendirme: İşlem başladı.");
logger.LogWarning("Uyarı: Beklenmeyen bir durum.");
logger.LogError("Hata: Bir istisna yakalandı.");
7. Log Management Sistemlerini Kullanmamak¶
❌ Yanlış Kullanım: Lokal loglama ile sınırlı kalmak.
logger.LogError("Hata kaydedildi.");
✅ İdeal Kullanım: Merkezi log yönetimi araçlarını kullanın.
- Azure Application Insights
- Elastic Stack (ELK)
- Sentry
- Loggly
- Seq
- Splunk
- Datadog
- Raygun
- New Relic
- Serilog
- NLog
- Log4Net
- Graylog