Apakah mungkin melakukan hal berikut menggunakan ELMAH?
logger.Log(" something");
Saya melakukan sesuatu seperti ini:
try
{
// Code that might throw an exception
}
catch(Exception ex)
{
// I need to log error here...
}
Pengecualian ini tidak akan secara otomatis dicatat oleh ELMAH, karena ditangani.
Jawaban:
Metode penulisan log langsung, bekerja sejak ELMAH 1.0:
ELMAH 1.2 memperkenalkan API yang lebih fleksibel:
Ada perbedaan antara dua solusi:
Raise
Metode berlaku aturan penyaringan ELMAH pengecualian.Log
metode tidak.Raise
berbasis langganan dan dapat mencatat satu pengecualian ke beberapa penebang.sumber
Elmah.ErrorLog.Log()
: ia melempar seandainya panggilan log itu sendiri gagal, mungkin menjatuhkan seluruh aplikasi web.Raise()
gagal diam-diam. Misalnya: jika ada masalah kesalahan konfigurasi di sisi server (mis. Elmah dikonfigurasi untuk menyimpan kesalahan ke disk, tetapi tidak memiliki akses yang benar ke folder log),.Log()
metode ini akan melempar. (Ini bagus untuk debugging, misalnya mengapa tidak.Raise()
mencatat apa pun?)Saya akan merekomendasikan membungkus panggilan ke Elmah dalam kelas pembungkus sederhana Anda sendiri.
Kemudian panggil saja setiap kali Anda perlu mencatat kesalahan.
Ini memiliki manfaat sebagai berikut:
Catatan: Saya telah menambahkan properti 'kontekstualMessage' untuk informasi kontekstual. Anda dapat menghilangkan ini jika Anda mau tetapi saya merasa sangat berguna. Elmah secara otomatis membuka bungkus pengecualian sehingga pengecualian yang mendasarinya masih akan dilaporkan dalam log tetapi Pesan kontekstual akan terlihat ketika Anda mengkliknya.
sumber
// uh oh! just keep going
. Jika penanganan kesalahan saya gagal saya ingin tahu. Saya ingin membuat kebisingan.Anda bisa menggunakan metode Elmah.ErrorSignal () untuk mencatat masalah tanpa memunculkan pengecualian.
sumber
sumber
Ya itu mungkin. ELMAH dirancang untuk mencegat pengecualian yang tidak ditangani. Namun Anda dapat memberi sinyal pengecualian ke ELMAH melalui kelas ErrorSignal. Pengecualian tersebut tidak dibuang (jangan digembungkan), tetapi hanya dikirim ke ELMAH (dan kepada pelanggan acara Naikkan kelas ErrorSignal).
Contoh kecil:
sumber
Saya mencari untuk melakukan hal yang sama di utas saya mulai mengantri surat dari dalam aplikasi MVC4 saya, karena itu saya tidak memiliki HttpContext tersedia ketika pengecualian muncul. Untuk melakukan ini saya berakhir dengan yang berikut berdasarkan pertanyaan ini dan jawaban lain yang ditemukan di sini: elmah: pengecualian tanpa HttpContext?
Dalam file konfigurasi saya tentukan nama aplikasi:
Kemudian dalam kode (seperti jawaban yang diberikan di atas, tetapi tanpa HttpContext) Anda dapat melewatkan nol alih-alih HttpContext:
sumber
packages.config
penampilan Anda ? Apakah Anda melihat sesuatu seperti<package id="elmah" version="1.2.2" targetFramework="net45" />
<package id="elmah.corelibrary" version="1.2.2" targetFramework="net45" />
<package id="elmah.sqlserver" version="1.2" targetFramework="net45" />'
:? Apakah Anda menginstal dengan NuGET?packages.config
Terkadang
CurrentHttpContext
mungkin tidak tersedia.Menetapkan
Menggunakan
sumber
Saya menggunakan inti ASP.NET dan saya menggunakan ElmahCore .
Untuk secara manual mencatat kesalahan dengan HttpContext (di controller) cukup tulis:
Di bagian lain aplikasi Anda tanpa HttpContext :
sumber
Saya mencoba untuk menulis pesan khusus ke dalam log elmah menggunakan Signal.FromCurrentContext (). Naikkan (ex); dan menemukan bahwa pengecualian ini menggelembung, misalnya:
Selain itu saya tidak melihat bagaimana elmah mendukung berbagai level logging - apakah mungkin untuk mematikan logging verbose dengan pengaturan web.config?
sumber
Digunakan baris ini dan itu berfungsi dengan baik.
sumber