تتبع الأخطاء في تطبيقات الويب المباشرة/الإنتاجية

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

  •  04-07-2019
  •  | 
  •  

سؤال

أعمل حاليًا في شركة لديها الكثير من التطبيقات المخصصة التي يتم إنشاؤها داخليًا.لا توجد حاليًا معايير لكثير من الأشياء.أرغب في تنفيذ طريقة لتسجيل/تتبع الأخطاء التي تحدث في هذه البرامج (معظمها asp.net).

أفكر حاليًا في التعامل مع هذا في Global.asax في طريقة خطأ التطبيق.حاول أولاً حفظ المعلومات في قاعدة بيانات سجل الأخطاء/التتبع، وإذا فشل ذلك، فحاول إرسال بريد إلكتروني.

ما نوع المعلومات الأكثر فائدة للحصول عليها من رسالة الخطأ ومتغيرات التطبيق الأخرى (الصفحة، اسم المستخدم، إلخ).

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

أنا متأكد من أنني أفتقد الكثير من التفاصيل وأرغب في سماع إستراتيجيتك للتعامل مع هذه المشكلة.

نصائح أخرى

ELMAH قد يكون ما كنت تبحث عنه.

إذا كنت تستخدم مكتبة قطع الأشجار (مثل Log4Net) يمكنك إعداد مختلف appenders تسجيل للدخول إلى البريد الإلكتروني، DB، ملف، سجل الأحداث، الخ في حين وجود مكالمة واحدة سجل في التعليمات البرمجية. هذا آخر يغطي كل ما تحتاجه للحصول على بدأت.

وهناك أيضا ASP.NET المراقبة الصحية .

وتحرير: ملصق آخر المذكورة ELMAH، وهو عظيم لتسجيل أخطاء ASP.NET، ويمكن أن يكون ديناميكيا "حقن" إلى تطبيقات تشغيل

هذا ما أفعله، وما زلت أعاني من خطأ بسبب مشكلة في البريد الإلكتروني.

لا أحتفظ أبدًا بأي شيء في قاعدة البيانات، لأنه إذا كان هناك خطأ في قاعدة البيانات، فلن أواجه هذا الخطأ أبدًا في قاعدة البيانات، ومن المنطقي أن يفشل الإدخال!

لذلك أرسل بريدًا إلكترونيًا إلى عنوان بريد إلكتروني خاص مثل bugs@mydomain.com

موضوع:[اسم التطبيق] [الطابع الزمني:دميييي هممس]رسالة:التطبيق ورسالة الخطأ ومعلومات تتبع المكدس بالإضافة إلى متغيرات الجلسة مثل اسم المستخدم ومتغيرات الخادم مثل المُحيل.

أفضل صديق لمطور ASP.NET هو ال معلومات تتبع المكدس, ، هنا ستعرف الخطأ الذي حدث، وما هي المكالمة وأين تم الاتصال.

المشكلة الوحيدة الذي لديك في هذا النظام، هو أنك لن تحصل على أي شيء إذا كان البريد الإلكتروني به مشكلة (بعض الاستثناءات عند إرسال البريد الإلكتروني)، ولهذا السبب بدأت في إضافة ملف XML شهريًا [errorLog_ mmm_yyyy.xml] أيضًا وصنعت صفحة "سحب وإسقاط" بسيطة مع عرض شبكي يقوم بتحميل ملف XML للشهر والسنة اللذين أردت التحقق من الأخطاء فيهما.

try 
{
   // production code
}
catch(Exception ex)
{
   Utilities.Mail.SendError(ex);
}

أو الطريقة الأفضل:إضافته إلى خطأ في تطبيق في global.asax:

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<script language="C#" runat="server">
void Application_Error(object sender, EventArgs e)
{
   //get reference to the source of the exception chain
   Exception ex = Server.GetLastError().GetBaseException();

   //log the details of the exception and page state to the
   //Windows Event Log
   EventLog.WriteEntry("myWebApplication name",
     "MESSAGE: " + ex.Message + 
     "\nSOURCE: " + ex.Source +
     "\nFORM: " + Request.Form.ToString() + 
     "\nQUERYSTRING: " + Request.QueryString.ToString() +
     "\nTARGETSITE: " + ex.TargetSite +
     "\nSTACKTRACE: " + ex.StackTrace, 
     EventLogEntryType.Error);

   Utilities.Mail.SendError(ex);
}
</script>

باستخدام الكود أعلاه، قمت بإضافة الخطأ إلى سجل الأحداث، وألحق الخطأ بملف XML في وظيفة SendError(Exception).

كن حذرا جدا عند تسجيل معلومات قد تكون سرية والتي وصلت عبر HTTPS. سيكون المستخدم يتوقعون أن تكون مشفرة نهاية إلى نهاية (التي قد تكون شرطا قانونيا). تأكد من أنك لا إرساله عبر البريد الإلكتروني العادي.

وعادة أنا أقول تسجيل كافة الطلب بما في ذلك الحصول على، وظيفة، الكوكيز، الدولة النموذج (في ASPNET)، وكيل المستخدم، ورؤوس أخرى، التاريخ / الوقت، الجهاز الخادم وغيرها

ولكن في بعض الحالات التي من شأنها أن تؤدي إلى بعض المعلومات التي يتم تسجيل أنت ليس من المفترض أن يسجل بشكل دائم (مثل يتم تمريرها أرقام بطاقات الائتمان من خلال مزود الدفع). إرساله عن طريق البريد الإلكتروني هو أسوأ من ذلك.

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

ويبدو فعلا وكأنك مدروسة الحل بشكل جيد.

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

وبديل للنظر ستكون على البريد الالكتروني تقريرا كل يوم أن يقدم معلومات عن كل خطأ القيت في كل تطبيق وأية معلومات ذات الصلة التي كنت تريد في البريد الإلكتروني.

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

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

عند تسجيل الدخول إلى فشل قاعدة البيانات، يمكن أن تكتب إلى سجل الأحداث الموجودة على الخادم، أو إلى ملف Log.txt. يمكنك الاختيار يعتمد هنا جزئيا على ما إذا كان لديك حق الوصول إلى خوادم الويب التي تحتوي على تلك.

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

وأفعل ذلك من خلال خلق العرف الدرجة استثناء خاصة مع الخصائص بما في ذلك معلومات المستخدم (ID، اسم إن وجدت)، وكلها متغيرات الدورة، كل من متغيرات النموذج (حتى تتمكن من معرفة كيف تم تعبئة النموذج وما دخل المستخدم)، وبعض المؤشرات إلى ما بعد تتبع المكدس من حيث حدث الخطأ (أي صفحة، والذي الطبقة، الطريقة التي). وتشمل أيضا اسم الإجراء المخزن يسمى والمعلمات إرسال، أو SQL نفسها. أيضا كافة الخصائص استثناء (تتبع المكدس، الخ). وDisplayMessage وInternalMessage المجالات. يتم عرض DisplayMessage للمستخدم. يتم تسجيل InternalMessage في السجل، وعرضها على صفحة خطأ مخصصة عندما تكون في وضع التصحيح.

وأفعل تسجيل في Page_Error على الصفحة قاعدة، ونتيجة لآمنة من الفشل في Application_Error.

وأحيانا إضافة زوج قيمة المفتاح في الملف web.config لاحتواء عنوان البريد الإلكتروني الخاص بي (أو قائمة توزيع). إذا كان هناك vaue في هذا المفتاح، ويحصل على إرسال إشعار البريد الإلكتروني. اذا لم يكن هناك قيمة، يتم إرسال أية eomail. ثم، أثناء الاختبار أو الإنتاج في وقت مبكر، يمكنني الحصول على إخطار شخصي فوري للمشكلة. بعد يمر الفترة الأولى، يمكنني إزالة عنوان البريد الإلكتروني في الملف web.config.

وتسجيل جيد، ولكن مراقبة تطبيق هو أفضل.

والتحذير: أنا مؤلف CALM

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

ويمكنك اختيار كيفية الحصول على إخطار عندما يعطي موقع الويب الخاص بك خطأ. RSS أو البريد الإلكتروني أو بأي طريقة تناسبك يمكن لجميع استخدامها للحصول على إعلامات الخطأ. ونعم، يمكنك إرسال الأخطاء إلى اي فون الخاص بك بينما كنت تواجه الشراب. هو مكتوب تماما في جانغو بحيث يمكنك استخدام JSON، رور، XML، CSV، وما إلى ذلك إذا كنت ترغب في علامة أو تنسيق البيانات الخاصة بك. أو مجرد المجيء إلى الموقع.

إذا كنت ترغب، أن ننظر في www.areciboapp.com.

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

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

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