আমি এলমাকে আপনার নিজের একটি সাধারণ মোড়কের ক্লাসে জড়ানোর পরামর্শ দিচ্ছি।
using Elmah;
public static class ErrorLog
{
/// <summary>
/// Log error to Elmah
/// </summary>
public static void LogError(Exception ex, string contextualMessage=null)
{
try
{
// log error to Elmah
if (contextualMessage != null)
{
// log exception with contextual information that's visible when
// clicking on the error in the Elmah log
var annotatedException = new Exception(contextualMessage, ex);
ErrorSignal.FromCurrentContext().Raise(annotatedException, HttpContext.Current);
}
else
{
ErrorSignal.FromCurrentContext().Raise(ex, HttpContext.Current);
}
// send errors to ErrorWS (my own legacy service)
// using (ErrorWSSoapClient client = new ErrorWSSoapClient())
// {
// client.LogErrors(...);
// }
}
catch (Exception)
{
// uh oh! just keep going
}
}
}
তারপরে আপনার যখন কোনও ত্রুটি লগ করার দরকার হয় কেবল তখনই এটি কল করুন।
try {
...
}
catch (Exception ex)
{
// log this and continue
ErrorLog.LogError(ex, "Error sending email for order " + orderID);
}
এর নিম্নলিখিত সুবিধা রয়েছে:
- আপনার এলমা কলটির এই সামান্য প্রত্নতাত্ত্বিক বাক্যটি মনে করার দরকার নেই
- আপনার যদি অনেকগুলি ডিএলএল থাকে তবে আপনার প্রত্যেককেই থেকে এলমা কোর উল্লেখ করার দরকার নেই - এবং এটি কেবল আপনার নিজের 'সিস্টেম' ডিএলএল এ রাখুন।
- আপনার যদি কখনও কোনও বিশেষ হ্যান্ডলিং করার প্রয়োজন হয় বা ত্রুটিগুলি ডিবাগ করার জন্য কেবল ব্রেক ব্রেকপয়েন্টে রাখতে চান তবে আপনার এটি সমস্ত একটি জায়গায় রয়েছে।
- আপনি যদি কখনও এলমা থেকে দূরে সরে যান তবে আপনি কেবল একটি জায়গা পরিবর্তন করতে পারেন।
- যদি আপনার লিগ্যাসি ত্রুটি লগিং থাকে তবে আপনি ধরে রাখতে চান (কিছুটা ইউআইতে বাঁধা একটি সাধারণ ত্রুটি লগিং প্রক্রিয়া আমার কাছে ঘটেছিল যা আমি অবিলম্বে অপসারণের জন্য সময় পাই না)।
দ্রষ্টব্য: আমি প্রাসঙ্গিক তথ্যের জন্য একটি 'প্রসঙ্গত মেসেজ' সম্পত্তি যুক্ত করেছি। আপনি যদি পছন্দ করেন তবে এটি বাদ দিতে পারেন তবে আমি এটি খুব দরকারী বলে মনে করি। এলমা স্বয়ংক্রিয়ভাবে ব্যতিক্রমগুলি মুছে ফেলে তাই অন্তর্নিহিত ব্যতিক্রমটি লগের মধ্যে এখনও জানানো হবে তবে আপনি যখন এটি ক্লিক করবেন তখন প্রাসঙ্গিক ম্যাসেজটি দৃশ্যমান হবে।