নুগেটে এখন একটি এলএমএএইচ.এমভিসি প্যাকেজ রয়েছে যার মধ্যে আতিফের একটি উন্নত সমাধান রয়েছে এবং এমন একটি কন্ট্রোলারও রয়েছে যা এমভিসি রাউটিংয়ের মধ্যে এলমা ইন্টারফেস পরিচালনা করে (সেই অক্ষটি আর ব্যবহার করার দরকার নেই)
সেই সমাধানটি নিয়ে সমস্যা (এবং এখানে সমস্ত কিছু রয়েছে) ) এটি হ'ল এক উপায় বা অন্যভাবে এলামার ত্রুটি হ্যান্ডলারটি ত্রুটিটি পরিচালনা করছে যা আপনি কাস্টমআরর ট্যাগ হিসাবে সেট আপ করতে চান বা ত্রুটিহ্যান্ডলার বা আপনার নিজের ত্রুটি হ্যান্ডলারের মাধ্যমে অগ্রাহ্য করছেন
সেরা সমাধান আইএমএইচও হ'ল এমন একটি ফিল্টার তৈরি করা যা অন্য সমস্ত ফিল্টারগুলির শেষে কাজ করে এবং ইতিমধ্যে হ্যান্ডেল করা ইভেন্টগুলিকে লগ করে। অ্যাপ্লিকেশনটির হাতছাড়া হওয়া অন্যান্য ত্রুটিগুলি এলগাহুল মডিউলটির লগ করার ক্ষেত্রে যত্ন নেওয়া উচিত। এটি আপনাকে স্বাস্থ্য মনিটর এবং অন্যান্য সমস্ত মডিউলগুলিও ত্রুটির ইভেন্টগুলি দেখার জন্য এসপ.netতে যুক্ত করা যেতে পারে
আমি এলেমা.এমভিসি এর ভিতরে ত্রুটিহ্যান্ডলারের প্রতিফলকের সাথে এই চেহারাটি লিখেছি
public class ElmahMVCErrorFilter : IExceptionFilter
{
private static ErrorFilterConfiguration _config;
public void OnException(ExceptionContext context)
{
if (context.ExceptionHandled) //The unhandled ones will be picked by the elmah module
{
var e = context.Exception;
var context2 = context.HttpContext.ApplicationInstance.Context;
//TODO: Add additional variables to context.HttpContext.Request.ServerVariables for both handled and unhandled exceptions
if ((context2 == null) || (!_RaiseErrorSignal(e, context2) && !_IsFiltered(e, context2)))
{
_LogException(e, context2);
}
}
}
private static bool _IsFiltered(System.Exception e, System.Web.HttpContext context)
{
if (_config == null)
{
_config = (context.GetSection("elmah/errorFilter") as ErrorFilterConfiguration) ?? new ErrorFilterConfiguration();
}
var context2 = new ErrorFilterModule.AssertionHelperContext((System.Exception)e, context);
return _config.Assertion.Test(context2);
}
private static void _LogException(System.Exception e, System.Web.HttpContext context)
{
ErrorLog.GetDefault((System.Web.HttpContext)context).Log(new Elmah.Error((System.Exception)e, (System.Web.HttpContext)context));
}
private static bool _RaiseErrorSignal(System.Exception e, System.Web.HttpContext context)
{
var signal = ErrorSignal.FromContext((System.Web.HttpContext)context);
if (signal == null)
{
return false;
}
signal.Raise((System.Exception)e, (System.Web.HttpContext)context);
return true;
}
}
এখন, আপনার ফিল্টার কনফিগারেশনে আপনি এর মতো কিছু করতে চান:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//These filters should go at the end of the pipeline, add all error handlers before
filters.Add(new ElmahMVCErrorFilter());
}
লক্ষ্য করুন যে আমি লোকদের মনে করিয়ে দেওয়ার জন্য সেখানে একটি মন্তব্য রেখেছি যে যদি তারা এমন একটি গ্লোবাল ফিল্টার যুক্ত করতে চান যা এটির শেষ ব্যতীত ফিল্টার হওয়ার আগে অবশ্যই ব্যতিক্রমটি পরিচালনা করতে পারে তবে অন্যথায় আপনি সেই ক্ষেত্রে চলে যাবেন যেখানে এলহাম এমভিসিসিআরআর ফিল্টার দ্বারা অবহেলিত হবে না এটি পরিচালনা করা হয়নি এবং এটি এলমাহ মডিউল দ্বারা চাপানো উচিত তবে তারপরে পরবর্তী ফিল্টারটি হ্যান্ডল হওয়া হিসাবে ব্যতিক্রম চিহ্নিত করে এবং মডিউলটি এড়িয়ে যায়, ব্যতিক্রমের ফলস্বরূপ এটি কখনই এলামায় পরিণত হয় না।
এখন, নিশ্চিত হয়ে নিন যে আপনার ওয়েবকনফিগের এলামার জন্য অ্যাপসেটিংগুলি কিছু দেখতে এইরকম:
<add key="elmah.mvc.disableHandler" value="false" /> <!-- This handles elmah controller pages, if disabled elmah pages will not work -->
<add key="elmah.mvc.disableHandleErrorFilter" value="true" /> <!-- This uses the default filter for elmah, set to disabled to use our own -->
<add key="elmah.mvc.requiresAuthentication" value="false" /> <!-- Manages authentication for elmah pages -->
<add key="elmah.mvc.allowedRoles" value="*" /> <!-- Manages authentication for elmah pages -->
<add key="elmah.mvc.route" value="errortracking" /> <!-- Base route for elmah pages -->
এখানে গুরুত্বপূর্ণটি হ'ল "elmah.mvc.disableHandleErrorFilter", যদি এটি মিথ্যা হয় তবে এটি elmah.mvc এর হ্যান্ডলারটি ব্যবহার করবে যা প্রকৃতপক্ষে ডিফল্ট হ্যান্ডেলআররহ্যান্ডলারের সাহায্যে ব্যতিক্রমটি পরিচালনা করবে যা আপনার কাস্টমআরর সেটিংসকে উপেক্ষা করবে
এই সেটআপটি আপনাকে ক্লাস এবং ভিউগুলিতে নিজের ত্রুটিহ্যান্ডলার ট্যাগগুলি সেট করার অনুমতি দেয়, তবু তবুও ত্রুটিগুলি এলামাহাভিভিসিআররিরফিল্টারের মাধ্যমে লগ ইন করার পরে, এলমাহ মডিউলটির মাধ্যমে আপনার ওয়েবকনফাইগে একটি কাস্টমরর কনফিগারেশন যুক্ত করে এমনকি আপনার নিজের ত্রুটি হ্যান্ডলারগুলিও লিখে দেয়। কেবলমাত্র আপনাকে যা করতে হবে তা হ'ল কোনও ফিল্টার যুক্ত না করা যা আমাদের লিখিত এলমা ফিল্টারের আগে ত্রুটিটি আসলে পরিচালনা করবে। এবং আমি উল্লেখ করতে ভুলে গেছি: এলামে কোনও নকল নেই।