Bagikan melalui


Detail Kesalahan Pengelogan dengan ASP.NET Monitor Kondisi (VB)

oleh Scott Mitchell

Sistem pemantauan kesehatan Microsoft menyediakan cara yang mudah dan dapat disesuaikan untuk mencatat berbagai peristiwa web, termasuk pengecualian yang tidak tertangani. Tutorial ini menjelaskan cara menyiapkan sistem pemantauan kesehatan untuk mencatat pengecualian yang tidak tertangani ke database dan memberi tahu pengembang melalui pesan email.

Pendahuluan

Pengelogan adalah alat yang berguna untuk memantau kesehatan aplikasi yang disebarkan dan untuk mendiagnosis masalah apa pun yang mungkin muncul. Sangat penting untuk mencatat kesalahan yang terjadi dalam aplikasi yang disebarkan sehingga dapat diperbaiki. Peristiwa Error ini dimunculkan setiap kali pengecualian yang tidak tertangani terjadi dalam aplikasi ASP.NET; tutorial sebelumnya menunjukkan cara memberi tahu pengembang tentang kesalahan dan mencatat detailnya dengan membuat penanganan aktivitas untuk peristiwa tersebut Error . Namun, membuat Error penanganan aktivitas untuk mencatat detail kesalahan dan memberi tahu pengembang tidak perlu, karena tugas ini dapat dilakukan oleh ASP. Sistem pemantauan kesehatan NET.

Sistem pemantauan kesehatan diperkenalkan di ASP.NET 2.0 dan dirancang untuk memantau kesehatan aplikasi ASP.NET yang disebarkan dengan mencatat peristiwa yang terjadi selama aplikasi atau masa pakai permintaan. Peristiwa yang dicatat oleh sistem pemantauan kesehatan disebut sebagai peristiwa pemantauan kesehatan atau peristiwa Web, dan meliputi:

  • Peristiwa seumur hidup aplikasi, seperti ketika aplikasi dimulai atau dihentikan
  • Peristiwa keamanan, termasuk upaya masuk yang gagal dan permintaan otorisasi URL yang gagal
  • Kesalahan aplikasi, termasuk pengecualian yang tidak tertangani, melihat pengecualian penguraian status, pengecualian validasi permintaan, dan kesalahan kompilasi, di antara jenis kesalahan lainnya.

Ketika peristiwa pemantauan kesehatan dinaikkan, peristiwa tersebut dapat dicatat ke sejumlah sumber log yang ditentukan. Sistem pemantauan kesehatan dikirim dengan sumber log yang mencatat peristiwa Web ke database Microsoft SQL Server, ke Log Peristiwa Windows, atau melalui pesan email, antara lain. Anda juga dapat membuat sumber log Anda sendiri.

Peristiwa log sistem pemantauan kesehatan, bersama dengan sumber log yang digunakan, didefinisikan dalam Web.config. Dengan beberapa baris markup konfigurasi, Anda dapat menggunakan pemantauan kesehatan untuk mencatat semua pengecualian yang tidak tertangani ke database dan untuk memberi tahu Anda tentang pengecualian melalui email.

Menjelajahi Konfigurasi Sistem Monitor Kondisi

Perilaku sistem pemantauan kesehatan didefinisikan oleh informasi konfigurasinya, yang terletak di <healthMonitoring> elemen di Web.config. Bagian konfigurasi ini mendefinisikan, antara lain, tiga informasi penting berikut:

  1. Peristiwa pemantauan kesehatan yang, ketika dinaikkan, harus dicatat,
  2. Sumber log, dan
  3. Bagaimana setiap peristiwa pemantauan kesehatan yang ditentukan dalam (1) dipetakan ke sumber log yang ditentukan dalam (2).

Informasi ini ditentukan melalui tiga elemen konfigurasi anak: <eventMappings>, , <providers>dan <rules>, masing-masing.

Informasi konfigurasi sistem pemantauan kesehatan default dapat ditemukan dalam Web.config file di %WINDIR%\Microsoft.NET\Framework\version\CONFIG folder. Informasi konfigurasi default ini, dengan beberapa markup dihapus untuk brevity, ditunjukkan di bawah ini:

<configuration>
  <system.web>
  <healthMonitoring>
  <eventMappings>
  <add name="All Errors" type="System.Web.Management.WebBaseErrorEvent,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" startEventCode="0" endEventCode="2147483647"/>

  <add name="Failure Audits" type="System.Web.Management.WebFailureAuditEvent,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" startEventCode="0" endEventCode="2147483647"/>
  </eventMappings>

  <providers>
  <add name="EventLogProvider" type="System.Web.Management.EventLogWebEventProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"/>

  <add connectionStringName="LocalSqlServer" maxEventDetailsLength="1073741823" buffer="false" bufferMode="Notification" name="SqlWebEventProvider" type="System.Web.Management.SqlWebEventProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"/>
  </providers>

  <rules>
  <add name="All Errors Default" eventName="All Errors" provider="EventLogProvider" profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:01:00" custom=""/>

  <add name="Failure Audits Default" eventName="Failure Audits" provider="EventLogProvider" profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:01:00" custom=""/>
  </rules>
  </healthMonitoring>
  </system.web>
</configuration>

Peristiwa pemantauan kesehatan yang menarik didefinisikan dalam <eventMappings> elemen , yang memberikan nama yang ramah manusia ke kelas peristiwa pemantauan kesehatan. Dalam markup di atas, <eventMappings> elemen menetapkan nama ramah manusia "Semua Kesalahan" ke peristiwa pemantauan kesehatan jenis WebBaseErrorEvent dan nama "Audit Kegagalan" ke peristiwa pemantauan kesehatan jenis WebFailureAuditEvent.

Elemen mendefinisikan <providers> sumber log, memberi mereka nama yang ramah manusia dan menentukan informasi konfigurasi khusus sumber log. Elemen pertama <add> mendefinisikan penyedia "EventLogProvider", yang mencatat peristiwa pemantauan kesehatan yang ditentukan menggunakan EventLogWebEventProvider kelas . Kelas EventLogWebEventProvider mencatat peristiwa ke Log Peristiwa Windows. Elemen kedua <add> mendefinisikan penyedia "SqlWebEventProvider", yang mencatat peristiwa ke database Microsoft SQL Server melalui SqlWebEventProvider kelas . Konfigurasi "SqlWebEventProvider" menentukan string koneksi database (connectionStringName) di antara opsi konfigurasi lainnya.

Elemen <rules> memetakan peristiwa yang ditentukan dalam <eventMappings> elemen untuk mencatat sumber dalam <providers> elemen. Secara default, ASP.NET aplikasi web mencatat semua pengecualian yang tidak tertangani dan kegagalan audit ke Log Peristiwa Windows.

Mencatat Peristiwa ke Database

Konfigurasi default sistem pemantauan kesehatan dapat disesuaikan berdasarkan aplikasi web-demi-web dengan menambahkan <healthMonitoring> bagian ke file aplikasi Web.config . Anda dapat menyertakan elemen tambahan di bagian <eventMappings>, , <providers>dan <rules> dengan menggunakan <add> elemen . Untuk menghapus pengaturan dari konfigurasi default, gunakan <remove> elemen , atau gunakan <clear /> untuk menghapus semua nilai default dari salah satu bagian ini. Mari kita konfigurasikan aplikasi web Ulasan Buku untuk mencatat semua pengecualian yang tidak tertangani ke database Microsoft SQL Server menggunakan SqlWebEventProvider kelas .

Kelas SqlWebEventProvider adalah bagian dari sistem pemantauan kesehatan dan mencatat peristiwa pemantauan kesehatan ke database SQL Server tertentu. Kelas SqlWebEventProvider mengharapkan bahwa database yang ditentukan menyertakan prosedur tersimpan bernama aspnet_WebEvent_LogEvent. Prosedur tersimpan ini diteruskan detail peristiwa dan ditugaskan untuk menyimpan detail peristiwa. Kabar baiknya adalah Anda tidak perlu membuat prosedur tersimpan ini atau tabel untuk menyimpan detail peristiwa. Anda dapat menambahkan objek ini ke database Anda menggunakan alat ini aspnet_regsql.exe .

Catatan

Alat ini aspnet_regsql.exe dibahas kembali dalam tutorial Mengonfigurasi Situs Web yang Menggunakan Layanan Aplikasi ketika kami menambahkan dukungan untuk ASP. Layanan aplikasi NET. Akibatnya, database situs web Ulasan Buku sudah berisi aspnet_WebEvent_LogEvent prosedur tersimpan, yang menyimpan informasi peristiwa ke dalam tabel bernama aspnet_WebEvent_Events.

Setelah Anda memiliki prosedur dan tabel tersimpan yang diperlukan yang ditambahkan ke database Anda, semua yang tersisa adalah menginstruksikan pemantauan kesehatan untuk mencatat semua pengecualian yang tidak tertangani ke database. Selesaikan ini dengan menambahkan markup berikut ke file situs web Web.config Anda:

<configuration>
  ...
  <system.web>
  ...
  <healthMonitoring enabled="true">
  <eventMappings>
  <clear />

  <add name="All Errors" type="System.Web.Management.WebBaseErrorEvent"
  startEventCode="0" endEventCode="2147483647" />
  </eventMappings>

  <providers>
  <clear />

  <add connectionStringName="ReviewsConnectionString" maxEventDetailsLength="1073741823"
  buffer="false" name="SqlWebEventProvider"
  type="System.Web.Management.SqlWebEventProvider" />
  </providers>

  <rules>
  <clear />

  <add name="All Errors Default" eventName="All Errors" provider="SqlWebEventProvider"
  profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00" />
  </rules>
  </healthMonitoring>
  </system.web>
</configuration>

Markup konfigurasi pemantauan kesehatan di atas menggunakan <clear /> elemen untuk menghapus informasi konfigurasi pemantauan kesehatan yang telah ditentukan sebelumnya dari bagian <eventMappings>, <providers>, dan <rules> . Kemudian menambahkan satu entri ke masing-masing bagian ini.

  • Elemen ini <eventMappings> mendefinisikan peristiwa pemantauan kesehatan tunggal yang menarik bernama "Semua Kesalahan", yang dimunculkan setiap kali pengecualian yang tidak tertangani terjadi.
  • Elemen mendefinisikan <providers> satu sumber log bernama "SqlWebEventProvider" yang menggunakan SqlWebEventProvider kelas . Atribut connectionStringName telah diatur ke "ReviewsConnectionString", yang merupakan nama string koneksi kami yang ditentukan di bagian .<connectionStrings>
  • Terakhir, <elemen aturan> menunjukkan bahwa ketika peristiwa "Semua Kesalahan" menerjemahkan bahwa itu harus dicatat menggunakan penyedia "SqlWebEventProvider".

Informasi konfigurasi ini menginstruksikan sistem pemantauan kesehatan untuk mencatat semua pengecualian yang tidak tertangani ke database Ulasan Buku.

Catatan

Kejadian WebBaseErrorEvent ini hanya dimunculkan untuk kesalahan server; tidak dimunculkan untuk kesalahan HTTP, seperti permintaan sumber daya ASP.NET yang tidak ditemukan. Ini berbeda dari perilaku HttpApplication peristiwa kelas Error , yang dimunculkan untuk kesalahan server dan HTTP.

Untuk melihat sistem pemantauan kesehatan beraksi, kunjungi situs web dan hasilkan kesalahan runtime dengan mengunjungi Genre.aspx?ID=foo. Anda akan melihat halaman kesalahan yang sesuai - Baik Detail Pengecualian Layar Kuning Kematian (saat mengunjungi secara lokal) atau halaman kesalahan kustom (saat mengunjungi situs dalam produksi). Di balik layar, sistem pemantauan kesehatan mencatat informasi kesalahan ke database. Harus ada satu rekaman dalam aspnet_WebEvent_Events tabel (lihat Gambar 1); rekaman ini berisi informasi tentang kesalahan runtime yang baru saja terjadi.

Cuplikan layar yang menyediakan detail kesalahan yang dicatat ke tabel.

Gambar 1: Detail Kesalahan Dicatat ke aspnet_WebEvent_Events Tabel
(Klik untuk melihat gambar ukuran penuh)

Menampilkan Log Kesalahan Di Halaman Web

Dengan konfigurasi situs web saat ini, sistem pemantauan kesehatan mencatat semua pengecualian yang tidak tertangani ke database. Namun, pemantauan kesehatan tidak menyediakan mekanisme apa pun untuk melihat log kesalahan melalui halaman web. Namun, Anda dapat membuat halaman ASP.NET yang menampilkan informasi ini dari database. (Seperti yang akan kita lihat sesaat, Anda dapat memilih untuk mengirim detail kesalahan kepada Anda dalam pesan email.)

Jika Anda membuat halaman seperti itu, pastikan Anda mengambil langkah-langkah untuk mengizinkan hanya pengguna yang berwenang untuk melihat detail kesalahan. Jika situs Anda sudah menggunakan akun pengguna, Anda dapat menggunakan aturan otorisasi URL untuk membatasi akses ke halaman ke pengguna atau peran tertentu. Untuk informasi selengkapnya tentang cara memberikan atau membatasi akses ke halaman web berdasarkan pengguna yang masuk, lihat Tutorial Keamanan Situs Web saya.

Catatan

Tutorial berikutnya menjelajahi sistem pengelogan dan pemberitahuan kesalahan alternatif bernama ELMAH. ELMAH menyertakan mekanisme bawaan untuk melihat log kesalahan dari halaman web dan sebagai umpan RSS.

Mencatat Peristiwa ke Email

Sistem pemantauan kesehatan mencakup penyedia sumber log yang "mencatat" peristiwa ke pesan email. Sumber log menyertakan informasi yang sama yang dicatat ke database dalam isi pesan email. Anda dapat menggunakan sumber log ini untuk memberi tahu pengembang saat peristiwa pemantauan kesehatan tertentu terjadi.

Mari kita perbarui konfigurasi situs web Ulasan Buku sehingga kami menerima email setiap kali pengecualian terjadi. Untuk mencapai hal ini, kita perlu melakukan tiga tugas:

  1. Konfigurasikan aplikasi web ASP.NET untuk mengirim email. Ini dicapai dengan menentukan bagaimana pesan email dikirim melalui <system.net> elemen konfigurasi. Untuk informasi selengkapnya tentang mengirim pesan email dalam aplikasi ASP.NET, lihat Mengirim Email di ASP.NET dan System.Net.Mail.
  2. Daftarkan penyedia sumber log email di <providers> elemen , dan
  3. Tambahkan entri ke <rules> elemen yang memetakan peristiwa "Semua Kesalahan" ke penyedia sumber log yang ditambahkan pada langkah (2).

Sistem pemantauan kesehatan mencakup dua kelas penyedia sumber log email: SimpleMailWebEventProvider dan TemplatedMailWebEventProvider. Kelas SimpleMailWebEventProvider mengirimkan pesan email teks biasa yang menyertakan detail peristiwa dan memberikan sedikit penyesuaian isi email. TemplatedMailWebEventProvider Dengan kelas Anda menentukan halaman ASP.NET yang markup yang dirender digunakan sebagai isi untuk pesan email. Kelas ini TemplatedMailWebEventProvider memberi Anda kontrol yang jauh lebih besar atas konten dan format pesan email, tetapi memerlukan sedikit lebih banyak pekerjaan di muka karena Anda harus membuat halaman ASP.NET yang menghasilkan isi pesan email. Tutorial ini berfokus pada penggunaan SimpleMailWebEventProvider kelas .

Perbarui elemen sistem <providers> pemantauan kesehatan dalam Web.config file untuk menyertakan sumber log untuk SimpleMailWebEventProvider kelas :

<providers>
  <clear />

  <add type="System.Web.Management.SimpleMailWebEventProvider"
  name="EmailWebEventProvider" buffer="false"
  from="support@example.com" to="support@example.com"
  subjectPrefix="Book Reviews Runtime Error: " />
  
  <add connectionStringName="ReviewsConnectionString" maxEventDetailsLength="1073741823"
  buffer="false" name="SqlWebEventProvider"
  type="System.Web.Management.SqlWebEventProvider" />
</providers>

Markup di atas menggunakan SimpleMailWebEventProvider kelas sebagai penyedia sumber log, dan menetapkannya nama yang mudah diingat "EmailWebEventProvider". Selain itu, <add> atribut menyertakan opsi konfigurasi tambahan, seperti alamat Ke dan Dari pesan email.

Dengan sumber log email yang ditentukan, semua yang tersisa adalah menginstruksikan sistem pemantauan kesehatan untuk menggunakan sumber ini untuk "mencatat" pengecualian yang tidak tertangani. Ini dicapai dengan menambahkan aturan baru di bagian <rules> :

<rules>
  <clear />

  <add name="All Errors To Email" eventName="All Errors" provider="EmailWebEventProvider"
  profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00" />

  <add name="All Errors To Database" eventName="All Errors" provider="SqlWebEventProvider"
  profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00" />
</rules>

Bagian <rules> sekarang menyertakan dua aturan. Yang pertama, bernama "Semua Kesalahan Ke Email", mengirimkan semua pengecualian yang tidak tertangani ke sumber log "EmailWebEventProvider". Aturan ini memiliki efek mengirim detail tentang kesalahan di situs web ke alamat Kepada yang ditentukan. Aturan "Semua Kesalahan Ke Database" mencatat detail kesalahan ke database situs. Akibatnya, setiap kali pengecualian yang tidak tertangani terjadi di situs detailnya keduanya dicatat ke database dan dikirim ke alamat email yang ditentukan.

Gambar 2 menunjukkan email yang dihasilkan oleh SimpleMailWebEventProvider kelas saat mengunjungi Genre.aspx?ID=foo.

Cuplikan layar yang memperlihatkan detail yang dikirim dalam pesan email.

Gambar 2: Detail Kesalahan Dikirim dalam Pesan Email
(Klik untuk melihat gambar ukuran penuh)

Ringkasan

Sistem pemantauan kesehatan ASP.NET dirancang untuk memungkinkan administrator memantau kesehatan aplikasi web yang disebarkan. Peristiwa pemantauan kesehatan dimunculkan ketika tindakan tertentu terungkap, seperti ketika aplikasi berhenti, ketika pengguna berhasil masuk ke situs, atau ketika pengecualian yang tidak tertangani terjadi. Peristiwa ini dapat dicatat ke sejumlah sumber log. Tutorial ini menunjukkan cara mencatat detail pengecualian yang tidak tertangani ke database dan melalui pesan email.

Tutorial ini berfokus pada penggunaan pemantauan kesehatan untuk mencatat pengecualian yang tidak tertangani, tetapi perlu diingat bahwa pemantauan kesehatan dirancang untuk mengukur kesehatan keseluruhan aplikasi ASP.NET yang disebarkan dan mencakup banyak peristiwa pemantauan kesehatan dan sumber log yang tidak dieksplorasi di sini. Terlebih lagi, Anda dapat membuat peristiwa pemantauan kesehatan dan sumber log Anda sendiri, jika kebutuhan muncul. Jika Anda tertarik untuk mempelajari lebih lanjut tentang pemantauan kesehatan, langkah pertama yang baik adalah membaca FAQ pemantauan kesehatan Erik Reitan. Setelah itu, lihat Cara: Gunakan Monitor Kondisi di ASP.NET 2.0.

Selamat Pemrograman!

Bacaan lebih lanjut

Untuk informasi selengkapnya tentang topik yang dibahas dalam tutorial ini, lihat sumber daya berikut: