سؤال

أفرز مؤشر ترابط على application_start وأرغب في تسجيل الاستثناءات. لا يوجد Context/HttpContext/HttpContext.Current, ، فكيف يمكنني الحصول عليه للتسجيل؟

في الوقت الحالي ، لا يجذب أي استثناء في موضوعاتي وإذا كتبت ErrorSignal.FromCurrentContext().Raise(ex); أحصل على خطأ حول السياق لا يمكن أن يكون فارغًا.

ربما يمكنني إنشاء httpcontext وهمية ولكن بطريقة ما لا أعتقد أن هذا سيعمل بشكل جيد.

-تعديل- حاولت ErrorSignal.Get(new HttpApplication()).Raise(ex); ويبدو أنه لا يبدو أن يلتقط هذا الاستثناء.

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

المحلول

تأكد من تعيين اسم التطبيق الخاص بك في web.config

<errorLog type="Elmah.SqlErrorLog, Elmah" 
          connectionStringName="nibWeb" 
          applicationName="Nib.Services" />

وثم

ErrorLog.GetDefault(null).Log(new Error(error));

سيعمل

نصائح أخرى

لم أكن أستخدم <errorLog> كما هو الحال في إجابة بريندان كاري لأنني كنت فقط في التسجيل في الذاكرة. ومع ذلك ، فقد عمل أمره بشكل رائع في حالتي دون تسمية التطبيق:

Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("The application has done something.")));

اضطررت إلى إعادة ترجمة Elmah مع .NET 4.0 ، بسبب خطأ في الحاجة إلى system.web.abstractions 3.5.0.0. شوكة مجمعة مقابل .net 4.0 هنا إذا كان أي شخص يريدها (أيضًا تسمية قوية):

http://code.google.com/r/scottafford-elmah/

لتطبيقي ، لقد حفظت this.Context.ApplicationInstance في Application_Start حتى أتمكن من الاتصال Elmah.ErrorSignal.Get مع مثيل محفوظ. مع ال ErrorSignal, ، هل يمكنني ذلك Raise. هذا يمر عبر جميع مرشحات البريد الإلكتروني.

أدناه هو الرمز. أستخدم fluentscheduler

public class Global : HttpApplication {
    void Application_Start(object sender, EventArgs e) {

        var application = Context.ApplicationInstance;
        FluentScheduler.TaskManager.UnobservedTaskException +=
            (FluentScheduler.Model.TaskExceptionInformation i, UnhandledExceptionEventArgs a) =>
                Elmah.ErrorSignal.Get(application).Raise(i.Task.Exception);

    }
}

أضفت حلاً إلى: باستخدام Elmah في تطبيق وحدة التحكم هذا يضيف القدرة على إرسال البريد الإلكتروني والتغريدات والتصفية بالإضافة إلى التسجيل.

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