سؤال

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

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

عندما أنا باستخدام "log4net.Appender.FileAppender+MinimalLock" الخيار هناك حالات من فقدان المعلومات.ليس كل السجلات من كلتا الحالتين يتم حفظ الملف.

كيف يمكنني حل هذه المشكلة وتسجيل معلومات من متوازية الحالات ؟ أيضا ماذا عن تدهور الأداء عند استخدام "MinimalLock" الخيار ؟

شكراوآمل لمساعدتكم.

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

المحلول

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

<appender name="MyRollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString">
    <conversionPattern value="log_%processid.log" />
  </file>
<!-- ... -->

نصائح أخرى

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

الكشف:أنا صاحب هذا المنتج.

ربما يمكنك تسجيل الدخول إلى ملفات مختلفة عن بعضها سبيل المثال ؟ خلاف ذلك, قد تحتاج إلى إعداد عملية منفصلة مخصص تسجيل الدخول.كل مثيل من البرنامج إرسال انه سجل الرسائل هناك سوف تأخذ الرعاية من إلحاق ذلك إلى الملف.هذا يمكن إنجازه باستخدام SocketAppender ، ربما.كما أجد أن كسر سجل الإخراج في الطبطبات باستخدام RollingFileAppender هو أسهل بكثير للتعامل مع.

يمكنك إنشاء مخصص appender أن يفتح الملف إلى كتابة ثم يغلق عليه.يجب أن ضرب ملف مؤمن ، فإنه يمكن إيقاف و إعادة المحاولة عدد قليل من المرات.

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

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

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

بالتأكيد النظر في إنشاء مختلف ملفات السجل لكل عملية ، وربما مع أسماء فريدة من نوعها تم إنشاؤها باستخدام الزمني.

بدلا من MinimalLock باستخدام InterProcessLock يمكن أن تقلل من فقدان البيانات أكان من عمليات متعددة الوصول إلى واحدة السجل.

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