ব্যতিক্রমগুলি লগ করতে আমি বর্তমানে আমার এএসপি.নেট এমভিসি অ্যাপ্লিকেশনটিতে লগ 4 নেট ব্যবহার করছি। আমি যেভাবে এটি করছি তা হল আমার সমস্ত কন্ট্রোলারগণ বেসকন্ট্রোলার শ্রেণীর উত্তরাধিকার সূত্রে প্রাপ্ত। বেসকন্ট্রোলারের অন্যাকশন এক্সকিউটিং ইভেন্টে, আমি ঘটেছে এমন কোনও ব্যতিক্রম লগ করছি:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Log any exceptions
ILog log = LogManager.GetLogger(filterContext.Controller.GetType());
if (filterContext.Exception != null)
{
log.Error("Unhandled exception: " + filterContext.Exception.Message +
". Stack trace: " + filterContext.Exception.StackTrace,
filterContext.Exception);
}
}
কোনও নিয়ন্ত্রণকারী ক্রিয়াকলাপের সময় যদি কোনও নিয়ন্ত্রণহীন ব্যতিক্রম ঘটে তবে এটি দুর্দান্ত কাজ করে।
404 ত্রুটি হিসাবে, আমার ওয়েলকনফাইগে এর মতো কাস্টম ত্রুটি সেট আপ হয়েছে:
<customErrors mode="On">
<error statusCode="404" redirect="~/page-not-found"/>
</customErrors>
এবং "পৃষ্ঠাটি পাওয়া যায় না" ইউআরএল পরিচালনা করে এমন নিয়ন্ত্রক ক্রিয়ায় আমি অনুরোধ করা হচ্ছে এমন মূল ইউআরএল লগইন করি:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult PageNotFound()
{
log.Warn("404 page not found - " + Utils.SafeString(Request.QueryString["aspxerrorpath"]));
return View();
}
এবং এটি কাজ করে।
আমার যে সমস্যাটি হচ্ছে তা হ'ল .aspx পৃষ্ঠায় থাকা ত্রুটিগুলি কীভাবে লগ করা যায়। ধরা যাক যে আমার একটি পৃষ্ঠায় সংকলন ত্রুটি বা কিছু ইনলাইন কোড রয়েছে যা একটি ব্যতিক্রম ছুঁড়ে ফেলবে:
<% ThisIsNotAValidFunction(); %>
<% throw new Exception("help!"); %>
দেখা যাচ্ছে যে হ্যান্ডলিরর অ্যাট্রিবিউটটি ভাগ করে নেওয়া ফোল্ডারে আমার ত্রুটি.এএসপিএক্স পৃষ্ঠাতে সঠিকভাবে এটি পুনরায় পাঠাচ্ছে, তবে এটি অবশ্যই আমার বেসকন্ট্রোলারের অন্যাকশনএক্সেকিউড পদ্ধতিতে ধরা পড়েনি। আমি ভাবছিলাম আমি সম্ভবত ত্রুটি.এএসপিএক্স পৃষ্ঠায় লগিং কোডটি রাখতে পারি তবে আমি কীভাবে সেই স্তরে ত্রুটি সম্পর্কিত তথ্য পুনরুদ্ধার করব তা সম্পর্কে আমি নিশ্চিত নই।