Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Scott Mitchell
Modul Dan Penangan Pengelogan Kesalahan (ELMAH) menawarkan pendekatan lain untuk mencatat kesalahan runtime di lingkungan produksi. ELMAH adalah pustaka pengelogan kesalahan gratis sumber terbuka yang mencakup fitur seperti pemfilteran kesalahan dan kemampuan untuk melihat log kesalahan dari halaman web, sebagai umpan RSS, atau untuk mengunduhnya sebagai file yang dibatasi koma. Tutorial ini berjalan melalui pengunduhan dan konfigurasi ELMAH.
Pengantar
Tutorial sebelumnya memeriksa ASP. Sistem pemantauan kesehatan NET, yang menawarkan pustaka out of the box untuk merekam berbagai peristiwa Web. Banyak pengembang menggunakan pemantauan kesehatan untuk mencatat dan mengirim email detail pengecualian yang tidak tertangani. Namun, ada beberapa titik nyeri dengan sistem ini. Pertama dan yang terutang adalah kurangnya antarmuka pengguna apa pun untuk melihat informasi tentang peristiwa yang dicatat. Jika Anda ingin melihat ringkasan 10 kesalahan terakhir, atau melihat detail kesalahan yang terjadi minggu lalu, Anda harus menyisir database, memindai melalui Kotak Masuk email Anda, atau membangun halaman web yang menampilkan informasi dari aspnet_WebEvent_Events
tabel.
Titik nyeri lain berpusat di sekitar kompleksitas pemantauan kesehatan. Karena pemantauan kesehatan dapat digunakan untuk merekam sejumlah besar peristiwa yang berbeda, dan karena ada berbagai opsi untuk menginstruksikan bagaimana dan kapan peristiwa dicatat, mengonfigurasi sistem pemantauan kesehatan dengan benar dapat menjadi tugas yang onerous. Akhirnya, ada masalah kompatibilitas. Karena pemantauan kesehatan pertama kali ditambahkan ke .NET Framework di versi 2.0, pemantauan kesehatan tidak tersedia untuk aplikasi web lama yang dibuat menggunakan ASP.NET versi 1.x. Selain itu, SqlWebEventProvider
kelas , yang kami gunakan dalam tutorial sebelumnya untuk mencatat detail kesalahan ke database, hanya berfungsi dengan database Microsoft SQL Server. Anda harus membuat kelas penyedia log kustom jika Anda perlu mencatat kesalahan ke penyimpanan data alternatif, seperti file XML atau database Oracle.
Alternatif untuk sistem pemantauan kesehatan adalah Modul Dan Penangan Pengelogan Kesalahan (ELMAH), sistem pencatatan kesalahan sumber terbuka gratis yang dibuat oleh Atif Aziz. Perbedaan paling mencolok antara kedua sistem adalah kemampuan ELAMH untuk menampilkan daftar kesalahan dan detail kesalahan tertentu dari halaman web dan sebagai umpan RSS. ELMAH lebih mudah dikonfigurasi daripada pemantauan kesehatan karena hanya mencatat kesalahan. Selain itu, ELMAH mencakup dukungan untuk aplikasi ASP.NET 1.x, ASP.NET 2.0, dan ASP.NET 3.5, dan kapal dengan berbagai penyedia sumber log.
Tutorial ini menjelaskan langkah-langkah yang terlibat dalam menambahkan ELMAH ke aplikasi ASP.NET. Mari kita mulai!
Catatan
Sistem pemantauan kesehatan dan ELMAH keduanya memiliki serangkaian pro dan kontra sendiri. Saya mendorong Anda untuk mencoba kedua sistem dan memutuskan apa yang paling sesuai dengan kebutuhan Anda.
Menambahkan ELMAH ke Aplikasi Web ASP.NET
Mengintegrasikan ELMAH ke dalam aplikasi ASP.NET baru atau yang sudah ada adalah proses yang mudah dan mudah yang memakan waktu kurang dari lima menit. Singkatnya, ini melibatkan empat langkah sederhana:
- Unduh ELMAH dan tambahkan assembly
Elmah.dll
ke aplikasi web Anda, - Daftarkan Modul dan Handler HTTP ELMAH di
Web.config
, - Tentukan opsi konfigurasi ELMAH, dan
- Buat infrastruktur sumber log kesalahan, jika diperlukan.
Mari kita telusuri masing-masing dari empat langkah ini, satu per satu.
Langkah 1: Mengunduh File Proyek ELMAH dan MenambahkanElmah.dll
Ke Aplikasi Web Anda
ELMAH 1.0 BETA 3 (Build 10617), versi terbaru pada saat penulisan, disertakan dalam unduhan yang tersedia dengan tutorial ini. Atau, Anda dapat mengunjungi situs web ELMAH untuk mendapatkan versi terbaru atau mengunduh kode sumber. Ekstrak unduhan ELMAH ke folder di desktop Anda dan temukan file rakitan ELMAH (Elmah.dll
).
Catatan
File Elmah.dll
terletak di folder unduhanBin
, yang memiliki subfolder untuk versi .NET Framework yang berbeda dan untuk build Rilis dan Debug. Gunakan build Rilis untuk versi kerangka kerja yang sesuai. Misalnya, jika Anda membangun aplikasi web ASP.NET 3.5, salin Elmah.dll
file dari Bin\net-3.5\Release
folder .
Selanjutnya, buka Visual Studio dan tambahkan assembly ke proyek Anda dengan mengklik kanan nama situs web di Penjelajah Solusi dan memilih Tambahkan Referensi dari menu konteks. Ini memunculkan kotak dialog Tambahkan Referensi. Navigasi ke tab Telusuri dan pilih Elmah.dll
file. Tindakan ini menambahkan Elmah.dll
file ke folder aplikasi Bin
web.
Catatan
Tipe Proyek Aplikasi Web (WAP) tidak menampilkan Bin
folder dalam Penjelajah Solusi. Sebaliknya, ini mencantumkan item ini di bawah folder Referensi.
Perakitan Elmah.dll
mencakup kelas yang digunakan oleh sistem ELMAH. Kelas-kelas ini termasuk dalam salah satu dari tiga kategori:
Modul HTTP - Modul HTTP adalah kelas yang menentukan penanganan aktivitas untuk
HttpApplication
peristiwa, sepertiError
peristiwa. ELMAH mencakup beberapa Modul HTTP, tiga yang paling jerman adalah:-
ErrorLogModule
- mencatat pengecualian yang tidak tertangani ke sumber log. -
ErrorMailModule
- mengirimkan detail pengecualian yang tidak tertangani dalam pesan email. -
ErrorFilterModule
- menerapkan filter yang ditentukan pengembang untuk menentukan pengecualian apa yang dicatat dan apa yang diabaikan.
-
Handler HTTP - Handler HTTP adalah kelas yang bertanggung jawab untuk menghasilkan markup untuk jenis permintaan tertentu. ELMAH menyertakan Handler HTTP yang merender detail kesalahan sebagai halaman web, sebagai umpan RSS, atau sebagai file yang dibatasi koma (CSV).
Sumber Log Kesalahan - di luar kotak ELMAH dapat mencatat kesalahan ke memori, ke database Microsoft SQL Server, ke database Microsoft Access, ke database Oracle, ke file XML, ke database SQLite, atau ke database Vista DB. Seperti sistem pemantauan kesehatan, arsitektur ELMAH dibangun menggunakan model penyedia, yang berarti Anda dapat membuat dan mengintegrasikan penyedia sumber log kustom Anda sendiri dengan lancar, jika diperlukan.
Langkah 2: Mendaftarkan Modul dan Handler HTTP ELMAH
Elmah.dll
Meskipun file berisi Modul HTTP dan Handler yang diperlukan untuk secara otomatis mencatat pengecualian yang tidak tertangani dan untuk menampilkan detail kesalahan dari halaman web, ini harus secara eksplisit terdaftar dalam konfigurasi aplikasi web.
ErrorLogModule
Modul HTTP, setelah terdaftar, berlangganan peristiwaHttpApplication
Error
. Setiap kali peristiwa ini dinaikkan ErrorLogModule
, log detail pengecualian ke sumber log tertentu. Kita akan melihat cara menentukan penyedia sumber log di bagian berikutnya, "Mengonfigurasi ELMAH." ErrorLogPageFactory
Pabrik Handler HTTP bertanggung jawab untuk menghasilkan markup saat melihat log kesalahan dari halaman web.
Sintaks khusus untuk mendaftarkan Modul dan Handler HTTP tergantung pada server web yang mendukung situs. Untuk ASP.NET Development Server dan IIS Microsoft versi 6.0 dan yang lebih lama, Modul dan Handler HTTP terdaftar di bagian <httpModules>
dan <httpHandlers>
, yang muncul di dalam <system.web>
elemen . Jika Anda menggunakan IIS 7.0 maka mereka perlu didaftarkan di <system.webServer>
bagian dan <handlers>
elemen<modules>
. Untungnya, Anda dapat menentukan Modul HTTP dan Handler di kedua tempat terlepas dari server web yang digunakan. Opsi ini adalah yang paling portabel karena memungkinkan konfigurasi yang sama digunakan dalam lingkungan pengembangan dan produksi terlepas dari server web yang digunakan.
Mulailah dengan mendaftarkan ErrorLogModule
Modul HTTP dan ErrorLogPageFactory
Handler HTTP di bagian <httpModules>
dan <httpHandlers>
di <system.web>
. Jika konfigurasi Anda sudah mendefinisikan kedua elemen ini, cukup sertakan <add>
elemen untuk Modul http dan Handler ELMAH.
<?xml version="1.0"?>
<configuration>
...
<system.web>
...
<httpHandlers>
...
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<httpModules>
...
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
</httpModules>
...
</system.web>
...
</configuration>
Selanjutnya, daftarkan Modul http dan Handler ELMAH dalam <system.webServer>
elemen . Seperti sebelumnya, jika elemen ini belum ada dalam konfigurasi Anda, tambahkan elemen tersebut.
<?xml version="1.0"?>
<configuration>
...
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
...
<add name="Elmah.ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
</modules>
<handlers>
...
<add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
</handlers>
</system.webServer>
</configuration>
Secara default, IIS 7 mengeluh jika Modul dan Handler HTTP terdaftar di bagian tersebut <system.web>
. Atribut validateIntegratedModeConfiguration
dalam <validation>
elemen menginstruksikan IIS 7 untuk menekan pesan kesalahan tersebut.
Perhatikan bahwa sintaks untuk mendaftarkan ErrorLogPageFactory
Handler HTTP menyertakan path
atribut , yang diatur ke elmah.axd
. Atribut ini menginformasikan aplikasi web bahwa jika permintaan tiba untuk halaman bernama elmah.axd
maka permintaan harus diproses oleh ErrorLogPageFactory
Handler HTTP. Kita akan melihat ErrorLogPageFactory
Handler HTTP beraksi nanti dalam tutorial ini.
Langkah 3: Mengonfigurasi ELMAH
ELMAH mencari opsi konfigurasinya dalam file situs web Web.config
di bagian konfigurasi kustom bernama <elmah>
. Untuk menggunakan bagian kustom di dalamnya Web.config
harus terlebih dahulu didefinisikan dalam <configSections>
elemen .
Web.config
Buka file dan tambahkan markup berikut ke <configSections>
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
...
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
</sectionGroup>
</configSections>
...
</configuration>
Catatan
Jika Anda mengonfigurasi ELMAH untuk aplikasi ASP.NET 1.x, hapus requirePermission="false"
atribut dari elemen di <section>
atas.
Sintaks di atas mendaftarkan bagian kustom <elmah>
dan subbagiannya: <security>
, , <errorLog>
<errorMail>
, dan <errorFilter>
.
Selanjutnya, tambahkan bagian <elmah>
ke Web.config
. Bagian ini akan muncul pada tingkat yang sama dengan <system.web>
elemen . Di dalam bagian <elmah>
tambahkan bagian <security>
dan <errorLog>
seperti itu:
<?xml version="1.0"?>
<configuration>
...
<elmah>
<security allowRemoteAccess="0" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ReviewsConnectionString" />
</elmah>
...
</configuration>
Atribut <security>
bagian allowRemoteAccess
menunjukkan apakah akses jarak jauh diizinkan. Jika nilai ini diatur ke 0, halaman web log kesalahan hanya dapat dilihat secara lokal. Jika atribut ini diatur ke 1, halaman web log kesalahan diaktifkan untuk pengunjung jarak jauh dan lokal. Untuk saat ini, mari kita nonaktifkan halaman web log kesalahan untuk pengunjung jarak jauh. Kami akan mengizinkan akses jarak jauh nanti setelah kami memiliki kesempatan untuk mendiskusikan masalah keamanan untuk melakukannya.
Bagian menentukan <errorLog>
sumber log kesalahan, yang menentukan di mana detail kesalahan direkam; ini mirip <providers>
dengan bagian dalam sistem pemantauan kesehatan. Sintaks di atas menentukan SqlErrorLog
kelas sebagai sumber log kesalahan, yang mencatat kesalahan ke database Microsoft SQL Server yang ditentukan oleh connectionStringName
nilai atribut.
Catatan
ELMAH dikirim dengan penyedia log kesalahan tambahan yang dapat digunakan untuk mencatat kesalahan ke file XML, database Microsoft Access, database Oracle, dan penyimpanan data lainnya. Lihat file sampel Web.config
yang disertakan dengan unduhan ELMAH untuk informasi tentang cara menggunakan penyedia log kesalahan alternatif ini.
Langkah 4: Membuat Infrastruktur Sumber Log Kesalahan
Penyedia ELMAH SqlErrorLog
mencatat detail kesalahan ke database Microsoft SQL Server tertentu. Penyedia SqlErrorLog
mengharapkan database ini memiliki tabel bernama ELMAH_Error
dan tiga prosedur tersimpan: ELMAH_GetErrorsXml
, , ELMAH_GetErrorXml
dan ELMAH_LogError
. Unduhan ELMAH menyertakan file bernama SQLServer.sql
dalam db
folder yang berisi T-SQL untuk membuat tabel ini dan prosedur tersimpan ini. Anda harus menjalankan pernyataan ini di database Anda untuk menggunakan SqlErrorLog
penyedia.
Gambar 1 dan 2 memperlihatkan Database Explorer di Visual Studio setelah objek database yang diperlukan oleh SqlErrorLog
penyedia telah ditambahkan.
Gambar 1: Penyedia SqlErrorLog
Mencatat Kesalahan ke ELMAH_Error
Tabel
Gambar 2: SqlErrorLog
Penyedia Menggunakan Tiga Prosedur Tersimpan
ELMAH Sedang Beraksi
Pada titik ini kami telah menambahkan ELMAH ke aplikasi web, mendaftarkan ErrorLogModule
Modul HTTP dan ErrorLogPageFactory
Handler HTTP, menentukan opsi konfigurasi ELMAH di Web.config
, dan menambahkan objek database yang diperlukan untuk SqlErrorLog
penyedia log kesalahan. Kami sekarang siap untuk melihat ELMAH beraksi! Kunjungi situs web Ulasan Buku dan kunjungi halaman yang menghasilkan kesalahan runtime, seperti Genre.aspx?ID=foo
, atau halaman yang tidak ada, seperti NoSuchPage.aspx
. Apa yang Anda lihat saat mengunjungi halaman ini tergantung pada <customErrors>
konfigurasi dan apakah Anda mengunjungi secara lokal atau jarak jauh. (Lihat kembali tutorial Menampilkan Halaman Kesalahan Kustom untuk penyegaran tentang topik ini.)
ELMAH tidak memengaruhi konten apa yang ditampilkan kepada pengguna ketika pengecualian yang tidak tertangani terjadi; itu hanya mencatat detailnya. Log kesalahan ini dapat diakses dari halaman elmah.axd
web dari akar situs web Anda, seperti http://localhost/BookReviews/elmah.axd
. (File ini tidak secara fisik ada di proyek Anda, tetapi ketika permintaan masuk untuk elmah.axd
runtime mengirimkannya ke ErrorLogPageFactory
Handler HTTP, yang menghasilkan markup yang dikirim kembali ke browser.)
Catatan
Anda juga dapat menggunakan elmah.axd
halaman untuk menginstruksikan ELMAH untuk menghasilkan kesalahan pengujian.
elmah.axd/test
Mengunjungi (seperti dalam, http://localhost/BookReviews/elmah.axd/test
) menyebabkan ELMAH melemparkan pengecualian jenis Elmah.TestException
, yang memiliki pesan kesalahan: " Ini adalah pengecualian pengujian yang dapat diabaikan dengan aman."
Gambar 3 menunjukkan log kesalahan saat mengunjungi elmah.axd
dari lingkungan pengembangan.
Gambar 3: Elmah.axd
Menampilkan Log Kesalahan dari Halaman Web
(Klik untuk melihat gambar ukuran penuh)
Log kesalahan di Gambar 3 berisi enam entri kesalahan. Setiap entri mencakup kode status HTTP (404 atau 500, untuk kesalahan ini), jenis, deskripsi, nama pengguna yang masuk ketika kesalahan terjadi, dan tanggal dan waktu. Mengklik tautan Detail menampilkan halaman yang menyertakan pesan kesalahan yang sama yang ditampilkan di Layar Kuning Detail Kesalahan Kematian (lihat Gambar 4) bersama dengan nilai variabel server pada saat kesalahan (lihat Gambar 5). Anda juga dapat melihat XML mentah tempat detail kesalahan disimpan, yang menyertakan informasi tambahan seperti nilai di header HTTP POST.
Gambar 4: Lihat Detail Kesalahan YSOD
(Klik untuk melihat gambar ukuran penuh)
Gambar 5: Jelajahi Nilai Koleksi Variabel Server pada Saat Kesalahan
(Klik untuk melihat gambar ukuran penuh)
Menyebarkan ELMAH ke situs web produksi memerlukan:
-
Elmah.dll
Menyalin file keBin
folder saat produksi, - Menyalin pengaturan konfigurasi khusus ELMAH ke file yang
Web.config
digunakan pada produksi, dan - Menambahkan infrastruktur sumber log kesalahan ke database produksi.
Kami telah mengeksplorasi teknik untuk menyalin file dari pengembangan ke produksi dalam tutorial sebelumnya. Mungkin cara term mudah untuk mendapatkan infrastruktur sumber log kesalahan pada database produksi adalah dengan menggunakan SQL Server Management Studio untuk menyambungkan ke database produksi dan kemudian menjalankan SqlServer.sql
file skrip, yang akan membuat tabel yang diperlukan dan prosedur tersimpan.
Menampilkan Halaman Detail Kesalahan tentang Produksi
Setelah menyebarkan situs Anda ke produksi, kunjungi situs web produksi dan hasilkan pengecualian yang tidak tertangani. Seperti di lingkungan pengembangan, ELMAH tidak berpengaruh pada halaman kesalahan yang ditampilkan ketika pengecualian yang tidak tertangani terjadi; sebaliknya, itu hanya mencatat kesalahan. Jika Anda mencoba mengunjungi halaman log kesalahan (elmah.axd
) dari lingkungan produksi, Anda akan disambut dengan halaman Terlarang yang ditunjukkan pada Gambar 6.
Gambar 6: Secara Default, Pengunjung Jarak Jauh Tidak Dapat Melihat Halaman Web Log Kesalahan
(Klik untuk melihat gambar ukuran penuh)
Ingat bahwa di bagian konfigurasi <security>
ELMAH kami mengatur allowRemoteAccess
atribut ke 0, yang melarang pengguna jarak jauh untuk melihat log kesalahan. Penting untuk melarang pengunjung anonim melihat log kesalahan, karena detail kesalahan mungkin mengungkapkan kerentanan keamanan atau informasi sensitif lainnya. Jika Anda memutuskan untuk mengatur atribut ini ke 1 dan mengaktifkan akses jarak jauh ke log kesalahan maka penting untuk mengunci elmah.axd
jalur sehingga hanya pengunjung yang berwenang yang dapat mengaksesnya. Ini dapat dicapai dengan menambahkan <location>
elemen ke Web.config
file.
Konfigurasi berikut hanya mengizinkan pengguna dalam peran Admin untuk mengakses halaman web log kesalahan:
<?xml version="1.0"?>
<configuration>
...
<elmah>
<security allowRemoteAccess="1" />
...
</elmah>
...
<location path="elmah.axd">
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*" />
</authorization>
</system.web>
</location>
</configuration>
Catatan
Peran Admin dan tiga pengguna dalam sistem - Scott, Jisun, dan Alice - ditambahkan dalam tutorial Mengonfigurasi Situs Web yang Menggunakan Layanan Aplikasi. Pengguna Scott dan Jisun adalah anggota peran Admin. Untuk informasi selengkapnya tentang autentikasi dan otorisasi, lihat Tutorial Keamanan Situs Web saya.
Log kesalahan pada lingkungan produksi sekarang dapat dilihat oleh pengguna jarak jauh; lihat kembali ke Gambar 3, 4, dan 5 untuk cuplikan layar halaman web log kesalahan. Namun, jika pengguna anonim atau non-Admin mencoba melihat halaman log kesalahan, mereka secara otomatis diarahkan ke halaman login (Login.aspx
), seperti yang ditunjukkan Gambar 7.
Gambar 7: Pengguna Yang Tidak Sah Secara Otomatis Diarahkan ke Halaman Masuk
(Klik untuk melihat gambar ukuran penuh)
Kesalahan Pengelogan Terprogram
Modul HTTP ELMAH ErrorLogModule
secara otomatis mencatat pengecualian yang tidak tertangani ke sumber log yang ditentukan. Atau, Anda dapat mencatat kesalahan tanpa harus menaikkan pengecualian yang tidak tertangani dengan menggunakan ErrorSignal
kelas dan metodenya Raise
. Metode Raise
ini melewati Exception
objek dan mencatatnya seolah-olah pengecualian itu telah dilemparkan dan telah mencapai runtime ASP.NET tanpa ditangani. Perbedaannya, bagaimanapun, adalah bahwa permintaan terus dijalankan secara normal setelah Raise
metode dipanggil, sedangkan pengecualian yang dilemparkan dan tidak tertangani mengganggu eksekusi normal permintaan dan menyebabkan runtime ASP.NET menampilkan halaman kesalahan yang dikonfigurasi.
Kelas ErrorSignal
ini berguna dalam situasi di mana ada beberapa tindakan yang mungkin gagal, tetapi kegagalannya tidak mengganggu operasi keseluruhan yang dilakukan. Misalnya, situs web mungkin berisi formulir yang mengambil input pengguna, menyimpannya dalam database, lalu mengirimi pengguna email yang memberi tahu mereka bahwa informasi mereka diproses. Apa yang harus terjadi jika informasi berhasil disimpan ke database, tetapi ada kesalahan saat mengirim pesan email? Salah satu opsinya adalah melemparkan pengecualian dan mengirim pengguna ke halaman kesalahan. Namun, ini mungkin membingungkan pengguna untuk berpikir bahwa informasi yang mereka masukkan tidak disimpan. Pendekatan lain adalah mencatat kesalahan terkait email, tetapi tidak mengubah pengalaman pengguna dengan cara apa pun. Di sinilah ErrorSignal
kelas berguna.
' ... Save user's information to the database ...
...
' Attempt to send the user a confirmation email
' ... Send an email ...
Try
Catch e As Exception
' Error in sending email. Log it!
ErrorSignal.FromCurrentContext().Raise(e)
End Try
Pemberitahuan Kesalahan Melalui Email
Seiring dengan kesalahan pengelogan ke database, ELMAH juga dapat dikonfigurasi untuk mengirim detail kesalahan email ke penerima tertentu. Fungsionalitas ini disediakan oleh ErrorMailModule
Modul HTTP; oleh karena itu, Anda harus mendaftarkan Modul Web.config
HTTP ini untuk mengirim detail kesalahan melalui email.
<?xml version="1.0"?>
<configuration>
...
<system.web>
...
<httpModules>
...
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/>
</httpModules>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
...
<add name="Elmah.ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="Elmah.ErrorMail" type="Elmah.ErrorMailModule" preCondition="managedHandler" />
</modules>
...
</system.webServer>
</configuration>
Selanjutnya, tentukan informasi tentang email kesalahan di <elmah>
bagian elemen <errorMail>
, yang menunjukkan pengirim dan penerima email, subjek, dan apakah email dikirim secara asinkron.
<?xml version="1.0"?>
<configuration>
...
<elmah>
...
<errorMail from="support@example.com"
to="support@example.com"
subject="Book Reviews Runtime Error"
async="true" />
</elmah>
...
</configuration>
Dengan pengaturan di atas di tempat, setiap kali kesalahan runtime terjadi ELMAH mengirim email ke support@example.com dengan detail kesalahan. Email kesalahan ELMAH menyertakan informasi yang sama yang ditunjukkan di halaman web detail kesalahan, yaitu pesan kesalahan, jejak tumpukan, dan variabel server (lihat kembali Ke Gambar 4 dan 5). Email kesalahan juga menyertakan Detail Pengecualian konten Yellow Screen of Death sebagai lampiran (YSOD.html
).
Gambar 8 menunjukkan email kesalahan ELMAH yang dihasilkan dengan mengunjungi Genre.aspx?ID=foo
. Meskipun Gambar 8 hanya menunjukkan pesan kesalahan dan jejak tumpukan, variabel server disertakan lebih jauh ke bawah dalam isi email.
Gambar 8: Anda dapat mengonfigurasi ELMAH untuk mengirim detail kesalahan melalui Email
(Klik untuk melihat gambar ukuran penuh)
Hanya Kesalahan Pengelogan yang Menarik
Secara default, ELMAH mencatat detail setiap pengecualian yang tidak tertangani, termasuk 404 dan kesalahan HTTP lainnya. Anda dapat menginstruksikan ELMAH untuk mengabaikan jenis kesalahan ini atau lainnya menggunakan pemfilteran kesalahan. Logika pemfilteran dilakukan oleh Modul HTTP ELMAH ErrorFilterModule
, yang harus Anda daftarkan Web.config
untuk menggunakan logika pemfilteran. Aturan untuk pemfilteran ditentukan di bagian <errorFilter>
.
Markup berikut menginstruksikan ELMAH untuk tidak mencatat kesalahan 404.
<?xml version="1.0"?>
<configuration>
...
<elmah>
...
<errorFilter>
<test>
<equal binding="HttpStatusCode" value="404" type="Int32" />
</test>
</errorFilter>
</elmah>
...
</configuration>
Catatan
Jangan lupa, untuk menggunakan pemfilteran kesalahan, Anda harus mendaftarkan ErrorFilterModule
Modul HTTP.
Elemen <equal>
di dalam bagian <test>
disebut sebagai pernyataan. Jika pernyataan mengevaluasi ke true, maka kesalahan difilter dari log ELMAH. Ada pernyataan lain yang tersedia, termasuk: <greater>
, , <greater-or-equal>
, <not-equal>
<lesser>
, <lesser-or-equal>
, dan sebagainya. Anda juga dapat menggabungkan pernyataan menggunakan <and>
operator Boolean dan <or>
. Terlebih lagi, Anda bahkan dapat menyertakan ekspresi JavaScript sederhana sebagai pernyataan, atau menulis pernyataan Anda sendiri di C# atau Visual Basic.
Untuk informasi selengkapnya tentang kemampuan pemfilteran kesalahan ELMAH, lihat bagian Pemfilteran Kesalahan di wiki ELMAH.
Ringkasan
ELMAH menyediakan mekanisme yang sederhana namun kuat untuk kesalahan pengelogan dalam aplikasi web ASP.NET. Seperti sistem pemantauan kesehatan Microsoft, ELMAH dapat mencatat kesalahan ke database dan dapat mengirim detail kesalahan ke pengembang melalui email. Tidak seperti sistem pemantauan kesehatan, ELMAH menyertakan dukungan out of the box untuk berbagai penyimpanan data log kesalahan yang lebih luas, termasuk: Microsoft SQL Server, Microsoft Access, Oracle, file XML, dan beberapa lainnya. Selain itu, ELMAH menawarkan mekanisme bawaan untuk melihat log kesalahan dan detail tentang kesalahan tertentu dari halaman web, elmah.axd
. Halaman ini elmah.axd
juga dapat merender informasi kesalahan sebagai umpan RSS atau sebagai file nilai yang dipisahkan koma (CSV), yang dapat Anda baca menggunakan Microsoft Excel. Anda juga dapat menginstruksikan ELMAH untuk memfilter kesalahan dari log menggunakan pernyataan deklaratif atau terprogram. Dan ELMAH dapat digunakan dengan aplikasi ASP.NET versi 1.x.
Setiap aplikasi yang disebarkan harus memiliki beberapa mekanisme untuk mencatat pengecualian yang tidak tertangani secara otomatis dan mengirim pemberitahuan ke tim pengembangan. Apakah ini dicapai menggunakan pemantauan kesehatan atau ELMAH adalah sekunder. Dengan kata lain, tidak terlalu penting apakah Anda menggunakan pemantauan kesehatan atau ELMAH; evaluasi kedua sistem lalu pilih salah satu yang paling sesuai dengan kebutuhan Anda. Yang pada dasarnya penting adalah bahwa beberapa mekanisme diberlakukan untuk mencatat pengecualian yang tidak tertangani di lingkungan produksi.
Selamat Pemrograman!
Bacaan lebih lanjut
Untuk informasi selengkapnya tentang topik yang dibahas dalam tutorial ini, lihat sumber daya berikut: