سؤال

أنا جعل بلدي التبديل من الترميز في C++ C#.أريد أن يحل محل بلدي C++ تسجيل الخطأ/الإبلاغ الكلي مع شيء مماثل في C#.

في C++ المصدر أستطيع أن أكتب

LOGERR("خطأ");أو LOGERR("خطأ مع المدخلات %s %d", stringvar, intvar);

الماكرو & دعم المكتبة البرمجية ثم يمر (ربما varargs) تنسيق الرسالة إلى قاعدة البيانات جنبا إلى جنب مع الملف المصدر, المصدر خط, اسم المستخدم و الوقت.نفس البيانات هو أيضا محشوة في بنية البيانات في وقت لاحق إبلاغ المستخدم.

لا أحد لديك التعليمات البرمجية C# قصاصات أو مؤشرات إلى الأمثلة التي تفعل هذا الخطأ الأساسي التقارير/تسجيل?

تحرير: في مرة سألت هذا السؤال كنت حقا جديدا .صافي و علم النظام.تشخيص.تتبع.النظام.تشخيص.تتبع ما كنت بحاجة في ذلك الوقت.منذ ذلك الحين لقد استخدمت log4net على المشاريع حيث تسجيل متطلبات أكبر وأكثر تعقيدا.فقط تحرير 500 خط ملف التكوين XML و log4net سوف تفعل كل شيء سوف تحتاج من أي وقت مضى :)

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

المحلول

الكثير من log4net دعاة هنا لذلك أنا متأكد من أن هذا سوف يكون تجاهلها ، ولكن سأضيف تفضيل بلدي:

System.Diagnostics.Trace

وهذا يشمل المستمعين أن الاستماع الخاصة بك Trace() الطرق ومن ثم الكتابة إلى ملف سجل/نافذة الإخراج/سجل الأحداث منها في الإطار التي تم تضمينها DefaultTraceListener, TextWriterTraceListener و EventLogTraceListener.فإنه يسمح لك لتحديد مستويات (تحذير أو خطأ أو معلومات) والفئات.

تتبع فئة على MSDN
الكتابة إلى سجل الأحداث في تطبيق ويب
UdpTraceListener - كتابة log4net متوافق رسائل XML إلى سجل المشاهد مثل log2console

نصائح أخرى

سأكون في غاية يوصي تبحث في log4Net.هذا بعد يغطي معظم ما تحتاجه للبدء.

جيد آخر تسجيل المكتبة NLog, التي يمكن تسجيل الدخول إلى الكثير من أماكن مختلفة ، مثل ملفات قواعد البيانات, الحدث مسجل.... الخ

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

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

موصى به للغاية.

على الرغم من أنني شخصيا أكره ذلك ، log4net يبدو أن المعيار الواقعي C# تسجيل.نموذج الاستخدام:

log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Error(“Some error”);
log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar);

كما قلت في موضوع آخر, لقد تم استخدام الكائن الرجل تسجيل إطار في إنتاج متعددة التطبيقات لعدة سنوات.انها السوبر سهلة الاستخدام و تمديد.

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

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

private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));

ثم تسجيل الخطأ.

_log.Error("Error messsage", ex);

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

Log.Information("Hello, {0}", username);

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

والفكرة هي أنه إذا كنت تستخدم 'NoSQL'-أسلوب تخزين البيانات على السجلات, يمكنك تسجيل الأحداث مثل:

{
    Timestamp: "2014-02-....",
    Message: "Hello, nblumhardt",
    Properties:
    {
        "0": "nblumhardt"
    }
}

على .صافي شكل سلسلة الجملة الممتدة حتى تتمكن من كتابة المثال أعلاه كما يلي:

Log.Information("Hello, {Name}", username);

في هذه الحالة العقار وسوف يطلق Name (بدلا من 0) ، مما يجعل الاستعلام عن والارتباط أسهل.

هناك بالفعل عدد قليل من الخيارات الجيدة للتخزين.MongoDB و أزور الجدول التخزين يبدو أن شعبية كبيرة ديي.لقد بنيت أصلا Serilog (على الرغم من أنه هو المشروع المجتمعي) و أنا الآن أعمل على منتج يسمى بعدها, التي تنص على تخزين و الاستعلام من هذه الأنواع من منظم سجل الأحداث.

يمكنك استخدام المدمج في .صافي قطع الأشجار.ننظر إلى TraceSource و TraceListeners ، يمكن أن يتم تكوين .ملف التكوين.

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

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

المدمج في البحث عن المفقودين في النظام.تشخيص جيد في .NET Framework و أنا استخدامها في العديد من التطبيقات.ولكن واحدة من الأسباب الرئيسية أنا لا تزال تستخدم log4net هي التي بنيت في .NET Framework تتبع تفتقر إلى العديد من المفيد كامل المواصفات appenders أن log4net بالفعل الإمدادات التي بنيت في.

فعلى سبيل المثال هناك في الحقيقة ليست جيدة المتداول ملف تتبع المستمع المحددة في .NET Framework أخرى من واحد في VB.NET dll الذي هو في الحقيقة ليس كل ما كامل المواصفات.

اعتمادا على بيئة التطوير الخاصة بك أنصح باستخدام log4net إلا 3rd الطرف الأدوات غير متوفرة ، ثم أقول استخدام النظام.التشخيص تتبع فصول.إذا كنت حقا بحاجة إلى أفضل appender/tracelistener يمكنك دائما تنفيذ ذلك بنفسك.

فعلى سبيل المثال العديد من عملائنا تتطلب منا عدم استخدام المكتبات مفتوحة المصدر عند تركيبها على الشركات آلات, حتى في هذه الحالة .NET Framework تتبع دروس مثاليا.

بالإضافة إلى ذلك - http://www.postsharp.org/ هو اوب مكتبة أنا أبحث في ذلك قد يساعد أيضا في تسجيل كما موضح هنا على مدونة المشروع:http://www.codeproject.com/KB/dotnet/log4postsharp-intro.aspx.

ExceptionLess هو واحد من أسهل nuget حزمة متاحة للاستخدام من أجل قطع الأشجار.لها مفتوحة المصدر المشروع.فإنه تلقائيا يعتني استثناء غير معالج وخيارات يدويا سجلات تتوفر.يمكنك تسجيل الدخول إلى الانترنت أو المضيف النفس على الملقم المحلي.

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

لديك أيضا خيار استخدام تطبيق تسجيل كتلة http://www.codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx

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