ELMAH عرض البيانات في استثناء قاموس البيانات

StackOverflow https://stackoverflow.com/questions/1223282

  •  11-07-2019
  •  | 
  •  

سؤال

عند استخدام ELMAH (التي هي رائعة) هل من الممكن لعرض المعلومات الإضافية التي قمت بإضافتها إلى استثناء.

E. g.

Exception ex = new Exception("New exception to use ErrorSignal functionality");
ex.Data.Add("ExtraInfo", "Here is some extra information i would like to be displayed.");
ErrorSignal.FromCurrentContext().Raise(ex);    

عندما عرض استثناء من elmah.axd لا يبدو أن تظهر "ExtraInfo" مفتاح وقيمة المعلومات مجرد استثناء السلسلة.

هل كانت مفيدة؟

المحلول

لا، ليس من الممكن لعرض معلومات اضافية مع الإصدارات 1.X الحالية.

نصائح أخرى

وكان لي حل لإضافة المعلومات إلى جمع المتغيرات خادم مثل ذلك.

var context = HttpContext.Current;
context.Request.ServerVariables["ERROR_CALLING_WEBSERVICE_URI"] = uri;
Elmah.ErrorLog.GetDefault(context).Log(new Error(e, context))

نعم، أنا أعتقد أن هذا هو الإختراق.
لكميات صغيرة من البيانات الإضافية تنظر التغليف الخطأ على النحو الذي اقترحهRoma
ولكن هذا الأسلوب هو مفيدة بشكل خاص حيث لديك الكثير من المعلومات بهدف وضعها في "رسالة خطأ مغلفة '

وطريقة بسيطة ليرحل، هو تغليف الخطأ. سيحتوي لك خطأ الخارجي رسالة مخصصة.

string msg = "my custom error message";

ErrorSignal.FromCurrentContext().Raise(
               new Elmah.ApplicationException(msg,ex));

وطيب، حتى لقد كنت في انتظار لهذا ليتم تضمينها لفترة طويلة جدا الآن، وقررت أن تجعل مفترق الخاصة بها وتشمل ميزة نفسي.

ويمكنك العثور عليها هنا: https://github.com/boena/elmah- مع البيانات المخصصة

ويستخدم Elmah ToString () طريقة للحصول على تفاصيل استثناء. مجرد تجاوز أسلوب عهدك استثناء ToString () وهذه الطريقة التي ستعمل:

وصفي استثناء:

public class MyCustomException : Exception
{
    public string CustomProperty { get; set; }

    public MyCustomException(string message, string customProperty): base(message)
    {
        this.CustomProperty = customProperty;
    }

    public override string ToString()
    {
        var result = base.ToString();
        var propertyData = String.Format("CustomProperty: {0}", this.CustomProperty);

        return result.Insert(
            result.IndexOf(Environment.NewLine),
            Environment.NewLine + propertyData
            );
    }
}

حسنا، بعد أن أمضى يوم عمل حول هذا الموضوع، وكنت اعتقدت تشاركونني الحل. تشبه الى حد بعيد حل الغموض في أعلاه، فإن الفرق يكون I تعديل كائن خطأ المستخدمة من قبل elmah بدلا من المتغيرات الخادم الطلب، كما يلي:

    public static void LogError(Exception e, IDictionary<string, string> customFields = null)
    {
        var logger = ErrorLog.GetDefault(HttpContext.Current);

        customFields = customFields ?? new Dictionary<string, string>();

        // Used to tell elmah not to log this twice (See global.asax)
        e.Data.Add("Logged", true);

        var error = new Error(e, HttpContext.Current);

        customFields.ForEach(pair => error.ServerVariables.Add(pair.Key, pair.Value));

        logger.Log(error);
    }

وبعد ذلك، اعتمادا على التطبيق الخاص بك للاتصال logger.LogError:

وMVC إضافة فلتر خطأ مخصصة ( HTTP : //maheshde.blogspot.ca/2012/09/error-handing-with-mvc-using-custom.html)

ونماذج الويب تجاوز Application_Error في global.asax

وبعد ذلك، مجرد خطوة واحدة أخيرة في global.asax، رفض أية أخطاء التي تم تسجيلها:

public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
    if (e.Exception.Data.Contains("Logged"))
    {
        if (e.Exception.Data["Logged"].Equals(true)) e.Dismiss();
    }
}

نظرا لأنها مفتوحة المصدر ، هل يمكن أن مجرد الاستيلاء على المشروع وتخصيص Elmah لأغراض الخاصة بك:

http://code.google.com/p/elmah/

إذا كنت تستخدم MSSQL

  • نلقي نظرة على SqlErrorLog.cs

  • SQLServer.sql لإنشاء قاعدة البيانات الخاصة بك

أنا أفعل نفس الشيء ، ولكن أنا بحاجة إلى إضافة مبلغ إضافي بشكل عشوائي "رمز الخطأ" عمود و سأكون باستخدام بيانات الاستثناء إلى تتبع جميع مخصص, الدورة, شكل, معلومات ملف تعريف الارتباط التي عادة ما تكون في اوبر كبيرة xml المجال.لا يمكن تغيير هذا إلى JSON, لست متأكدا حتى الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top