كيف يمكنك تسجيل الأخطاء (الاستثناءات) ، ASP.NET تطبيقات ؟

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

سؤال

أنا أبحث عن أفضل طريقة تسجيل الأخطاء في ASP.NET التطبيق.أريد أن أكون قادرا على تلقي رسائل البريد الإلكتروني عندما الأخطاء تحدث في التطبيق ، مع معلومات مفصلة حول استثناء الطلب الحالي.

في الشركة كان لدينا الخاصة بنا ErrorMailer ، اصطياد كل شيء في عالمي.asax Application_Error.كانت "موافق" ولكن ليست مرنة جدا ولا شكلي.

لقد تحولت مؤخرا إلى NLog.انها أكثر من ذلك بكثير شكلي ، يمكننا تحديد أهداف مختلفة عن أخطاء تصفية لهم, عازلة لهم (لم يحاكم حتى الآن).وهو تحسن جيد جدا.

لكني اكتشفت مؤخرا أن هناك مساحة في .Net framework لهذا الغرض : النظام.ويب.إدارة و يمكن تكوينه في healthMonitoring قسم من شبكة الإنترنت.config.

هل سبق لك أن عملت مع .صافي الصحة الرصد ؟ ما هو الحل الخاص بك من أجل تسجيل الخطأ?

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

المحلول

يمكنني استخدام elmah.لديه بعض الميزات لطيف و هنا CodeProject المادة على ذلك.أعتقد أن ستاكوفيرفلوو يستخدم فريق elmah أيضا!

نصائح أخرى

لقد تم استخدام Log4net, تكوين البريد الإلكتروني التفاصيل من الأخطاء القاتلة.إنه أيضا إلى تسجيل كل شيء إلى ملف سجل ، التي لا تقدر بثمن عند محاولة تصحيح المشاكل.فائدة أخرى هي أنه إذا كان هذا المعيار وظائف لا تفعل ما تريد ، فإنه من السهل إلى حد ما أكتب مخصص appender التي يمكن أن عملية تسجيل المعلومات المطلوبة.

وقد قلت ذلك, أنا باستخدام هذا جنبا إلى جنب مع العرف معالج الأخطاء التي يرسل البريد الإلكتروني html مع أكثر قليلا من المعلومات مما هو متضمنة في معيار log4net رسائل البريد الإلكتروني - الصفحة الدورة متغيرات الكوكيز, http server المتغيرات ، إلخ.

هذه هي على حد سواء السلكية في Application_OnError الحدث ، حيث الاستثناء يتم تسجيل استثناء فادح في log4net (ثم الذي يؤدي إلى تكون عبر البريد الالكتروني إلى عنوان البريد الإلكتروني المحدد), و أيضا التعامل معها باستخدام مخصص معالج الأخطاء.

سمعت لأول مرة عن Elmah من الترميز الرعب بلوق الدخول ، تحطم بمسؤولية, و على الرغم من أنها تبدو واعدة أنا لم تنفذ أي مشاريع.

لقد تم استخدام مكتبة المؤسسة تسجيل الأجسام.لأنها تتيح لك الحصول على أنواع مختلفة من الأشجار (شقة الملف, البريد الإلكتروني و/أو قاعدة بيانات).انها جميلة للتخصيص بشكل جيد واجهة تحديث الويب الخاص بك.التكوين من أجل التكوين من قطع الأشجار.عادة ما أدعو لي تسجيل من على خطأ في النظام العالمي.asax.

وهنا رابط MSDN

يمكنني استخدام log4net وأين أنا من أي وقت مضى نتوقع استثناء يمكنني تسجيل الدخول إلى المستوى المناسب.أنا لا تميل إلى إعادة رمي استثناء لأنه لا يسمح لي كما من الجميل تجربة المستخدم ، هناك أقل من المعلومات التي يمكن أن توفر في الوقت الحالي.

سوف يكون Application_Error أيضا تكوين للقبض على أي استثناء والتي لم يكن من المتوقع و يتم تسجيل الخطأ كما قاتلة الأولوية خلال log4net (حسنا ، 404 تم الكشف عن تسجيل كما من المعلومات كما أنها ليست عالية الخطورة).

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

log4net يدعم تسجيل الدخول إلى مجموعة متنوعة واسعة من المواقع - قاعدة بيانات البريد الإلكتروني, ملف نصي, سجل أحداث Windows, الخ.فريقي فقد تكوينه لإرسال معلومات مفصلة الخطأ إلى قاعدة البيانات و أيضا إرسال بريد إلكتروني إلى فريق كامل مع ما يكفي من المعلومات لتحديد في أي جزء من رمز الخطأ نشأت.ثم نحن نعرف من هو المسؤول عن هذا قطعة من التعليمات البرمجية ، وأنها يمكن أن تذهب إلى قاعدة البيانات للحصول على معلومات أكثر تفصيلا.

كنت مؤخرا قد بنيت asp.net خدمة ويب مع NLog التي يمكنني استخدام جميع تطبيقات سطح المكتب.التسجيل يعمل بشكل جيد عندما أكون تصحيح الأخطاء في Visual Studio, ولكن بمجرد التبديل إلى IIS ملف السجل لا خلق ؛ لم يتحدد بعد لماذا, ولكنه حقيقة أن كنت بحاجة إلى البحث عن حل يجعلني تريد أن تجرب شيئا آخر بالنسبة لي asp.net يحتاج!

نحن نستخدم EnterpriseLibrary.ExceptionHandling.قطع الأشجار.أنا أحب ذلك أفضل قليلا من log4net لأننا لا يمكننا التحكم في قطع الأشجار تماما ، ولكن يمكننا التحكم في رمي/NoThrow القرار داخل التكوين كذلك.

نحن نستخدم مخصص محلية تسجيل util كتبنا.فإنه يتطلب منك تنفيذ تسجيل الدخول الخاصة بك في كل مكان كنت في حاجة إليها.ولكن أيضا يسمح لك التقاط أكثر بكثير من مجرد استثناء.

على سبيل المثال لدينا رمز تبدو مثل هذا:

Try
  Dim p as New Person()
  p.Name = "Joe"
  p.Age = 30
Catch ex as Exception
  Log.LogException(ex,"Err creating person and assigning name/age")
  Throw ex
End Try

هذه الطريقة مسجل لدينا سوف أكتب كل المعلومات التي نحن بحاجة إلى قاعدة بيانات SQL.لدينا تنبيهات البريد الإلكتروني في DB مستوى للبحث عن بعض الأخطاء أو كثيرا ما تحدث أخطاء.أنها تساعدنا على تحديد بالضبط أين الأخطاء تأتي من.

هذا قد لا يكون بالضبط ما كنت أبحث عنه.نهج آخر مماثل باستخدام العالمية.asax لنا مدونة تقنية الحقن مثل اوب مع PostSharp.هذا يسمح لك أن حقن التعليمات البرمجية المخصصة في بداية ونهاية كل أسلوب أو على كل استثناء.انها مقاربة مثيرة للاهتمام ولكن أعتقد أنه قد يكون ثقيل أداء النفقات العامة.

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