ماذا تفعل إذا فشل تسجيل الأخطاء، وكيف يمكنك اختبار نجاحه في الإنتاج؟

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

سؤال

  1. ماذا تفعل إذا فشل رمز تسجيل الخطأ؟
  2. كيف تتأكد من أنه يعمل حاليا؟
  3. كيف تعرف إذا كانت لا تعمل؟
  4. كيف يمكنك اختبار عملها في بيئة الإنتاج؟
  5. هل يجب أن أطرح استثناءً إذا فشل كل شيء آخر؟

يستخدم الكود أدناه كتلة تطبيق تسجيل مكتبة المؤسسة الخاصة بـ Microsoft.كيف تجعله "أفضل"؟

using Microsoft.Practices.EnterpriseLibrary.Logging;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // Trying to write some data to the DB
            ...
        }
        catch (Exception ex)
        {
            LogHelper.LogException(ex, "Trying to write to the DB");
        }
    }
}

public class LogHelper
{
    public static void LogException(Exception ex, string exceptionType)
    {
        try
        {
            // Simplified version, only logging the message
            Logger.Write(exceptionType);
        }
        catch
        {
            // What do you do here???
        }
    }
}
هل كانت مفيدة؟

المحلول

انظر الإجابات في بلدي سؤال ذو صلة:

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

في هذه الحالة (الاستثنائية) المحددة، يعد ابتلاع الاستثناء هو الطريقة الوحيدة لعدم إنهاء التطبيق.

نصائح أخرى

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

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

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

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

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

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