ELMAH V2: Error Logging untuk ASP.NET Core

ELMAH V2 (Error Logging Modules and Handlers) adalah evolusi dari pustaka pencatatan kesalahan populer untuk aplikasi .NET, yang kini dirancang khusus agar kompatibel secara native dengan arsitektur modern ASP.NET Core. Alat ini berfungsi menangkap, mencatat, dan menyediakan antarmuka web untuk memvisualisasikan seluruh unhandled exception yang terjadi pada aplikasi web Anda tanpa memerlukan perubahan kode yang masif.

Berbeda dengan versi klasik yang sangat bergantung pada arsitektur berbasis IIS (Internet Information Services) dan berkas web.config, ELMAH V2 dibangun di atas fondasi middleware ASP.NET Core. Hal ini membuatnya bersifat lintas platform (cross-platform), dapat berjalan di atas Kestrel, serta mendukung penyimpanan data log ke berbagai backend mulai dari basis data relasional hingga penyimpanan awan.

Arsitektur dan Perbedaan Utama ELMAH Klasik vs V2

Transisi dari ELMAH versi pertama ke versi kedua membawa perubahan radikal pada cara pustaka ini berintegrasi dengan siklus hidup permintaan (request pipeline) aplikasi .NET. Pada ASP.NET Core, sistem penanganan kesalahan mengandalkan middleware alih-alih HTTP Modules dan HTTP Handlers.

Fitur ELMAH V1 (Classic) ELMAH V2 (ASP.NET Core)
Arsitektur Web System.Web (IIS Dependent) ASP.NET Core Middleware
Kompatibilitas OS Windows Only (IIS) Windows, Linux, macOS
Konfigurasi web.config (XML) appsettings.json & DI Container
Dependency Injection Tidak Didukung Didukung Penuh (Native DI)

Langkah Instalasi dan Konfigurasi Dasar

Untuk mengintegrasikan ELMAH V2 ke dalam proyek ASP.NET Core, Anda perlu memasang paket NuGet yang relevan, mendaftarkan layanan pada kontainer Dependency Injection (DI), dan memasang middleware pada pipa HTTP aplikasi.

1. Instalasi Paket NuGet

Jalankan perintah berikut melalui .NET CLI pada terminal Anda untuk menambahkan paket inti dan penyimpanan berbasis memori atau basis data:

dotnet add package Elmah.Core

2. Konfigurasi pada Program.cs

Pada versi ASP.NET Core terbaru, seluruh konfigurasi didaftarkan di dalam berkas Program.cs. Berikut adalah contoh implementasi dasar:

using Elmah.Core;

var builder = WebApplication.CreateBuilder(args);

// Menambahkan layanan ELMAH ke DI Container
builder.Services.AddElmah<ElmahMemCachedErrorLog>(options =>
{
    options.Path = "/elmah"; // Jalur akses dashboard error
});

var app = builder.Build();

// Mengaktifkan middleware ELMAH
app.UseElmah();

app.MapGet("/", () => "Hello World!");

app.Run();

Opsi Penyimpanan Log (Error Log Providers)

ELMAH V2 menyediakan fleksibilitas dalam menentukan lokasi penyimpanan log kesalahan. Pemilihan penyedia (provider) sangat memengaruhi performa aplikasi dan kemudahan audit jangka panjang.

  • Memory Provider: Menyimpan log di dalam RAM. Cocok untuk lingkungan pengembangan lokal (development), namun tidak disarankan untuk produksi karena data akan hilang saat aplikasi melakukan restart.
  • SQL Server / Relational DB Provider: Menyimpan setiap exception ke dalam tabel basis data relasional. Memudahkan pembuatan laporan kustom dan kueri analitik lanjutan.
  • JSON / File Provider: Menuliskan log ke dalam berkas teks berbasis format JSON di direktori server lokal.

Keunggulan dan Keterbatasan

Sebelum memutuskan menggunakan ELMAH V2 pada proyek skala enterprise, penting untuk menimbang kelebihan serta keterbatasannya dibandingkan kerangka kerja logging modern seperti Serilog atau NLog.

Kelebihan

    Antarmuka web bawaan (built-in dashboard) siap pakai untuk melihat detail error beserta HTTP headers, cookies, dan stack trace tanpa harus membangun UI sendiri.

    Konfigurasi yang selaras dengan pola standar ASP.NET Core modern.

    Mendukung sistem peringatan (email notification) secara instan saat terjadi galat kritis.

Keterbatasan

    Antarmuka web bawaan tidak memiliki sistem otentikasi bawaan yang ketat; pengembang wajib mengamankan jalur /elmah menggunakan policy authorization agar tidak dapat diakses publik.

    Kurang fleksibel untuk sistem terdistribusi skala besar (microservices) dibandingkan pengumpulan log terpusat seperti ELK Stack atau Datadog.

Praktik Terbaik Keamanan Dashboard ELMAH

Karena dashboard ELMAH menampilkan informasi sensitif mengenai struktur aplikasi dan data permintaan pengguna yang gagal, Anda wajib melindungi akses ke endpoint tersebut. Pada ASP.NET Core, Anda dapat membatasi akses berdasarkan peran (roles) atau klaim (claims) pengguna tertentu:

app.UseEndpoints(endpoints =>
{
    endpoints.MapElmah().RequireAuthorization(new AuthorizeAttribute 
    {
        Roles = "Administrator"
    });
});

Pastikan selalu memantau ukuran tabel penyimpanan log pada basis data produksi agar tidak membebani kapasitas penyimpanan server akibat akumulasi log kesalahan yang berlebihan.