لماذا يتم إلحاق التاريخ مرتين على أسماء الملفات عند استخدام log4net؟

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

  •  06-09-2019
  •  | 
  •  

سؤال

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

على سبيل المثال، بدلا من log.2009-02-23.log., ، انا حصلت log.2009-02-23.log.2009-02-23.log..

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

بلدي log4net config:

<log4net>
<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
    <file value="../../Logs/Mylog"/>
    <staticLogFileName value="false" />
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <datePattern value=".yyyy-MM-dd.lo\g" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{DATE} [%t] %-5p %c - %m%n"/>
    </layout>
</appender>
<root>
    <level value="INFO"/>
    <appender-ref ref="MyLog"/>
</root>
</log4net>

أي أفكار لماذا؟

تحرير: أريد إضافة المعلومات حول البيئة، وأختبر ذلك في.
- asp.net.
- .NET Framework 2.0
- Windows Server 2003 64 بت خدمة حزمة 2
- LOG4NET 1.2.10.

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

المحلول 2

إنها مشكلة إذن. على الأقل هذا ما يحدث لي.

أنا جديد في استخدام Log4net، لذلك لم أكن أعرف أنه يحتوي على تسجيل داخلي لكنني وجدت ذلك لذلك حاولت تشغيل تسجيل داخلي على. لم أكن متأكدة مما يقوله ولكن هذا ما يبدو لي أنه يفعل ذلك: 1. إلحاق التاريخ إلى اسم الملف. 2. حاول الوصول إلى الملف للكتابة إليه (فشل). 3. إلحاق تاريخ اسم الملف تكراراوبعد 4. الوصول بنجاح إلى الملف (الذي يحتوي على اسم ملف غريب الآن)

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

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

إذا كان أي شخص يمكن أن يفسر هذا أفضل مني، فلا تتردد في تحرير.

نصائح أخرى

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

تحقق من الكود الخاص بك للحصول على مكالمات مكررة إلى LOG4NET INIT - ربما كنت تهيئة في منشئ بدلا من منشئ Singleton الثابت أو INTIL GLOBAL، على سبيل المثال.

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

أركض في نفس المشكلة. بالنسبة لي، كان مزيجا من استخدام ROLLINGFILEAPPENDER للحصول على سجلات الاختبار الخاصة بي، وتشغيل اختبارات Nunit الخاصة بي مع RESHRAPER.

اتضح أن الاستخدامات resharper اثنين العمليات لتشغيل الاختبارات:

2 TaskRunners

الذي ينشئ حالة السباق على ملف السجل.

الآن، إذا غيرنا اسم ملف السجل لتضمين معرف العملية:

<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="MyLog.pid.%processid" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="false"/>
  <datePattern value="_yyyy-MM-dd'.log'"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%15.15t] %-5p '%40.40c' - %m%n" />
  </layout>
</appender>

حلت المشكلة. كل ملف يحصل على اسمه، اسم فريد:

mylog.pid.5440_2010-10-13.log.
mylog.pid.1496_2010-10-13.log.

لاحظ استخدام pettingstring. ل "النوع".

امل ان يساعد.

كما أشار olly. ترتبط مشكلتك ب " g"، والتي تفسر Log4net الخاص بك ك Deadformat آخر. حاول حذف ".YYYY-MM-DD.LO G" واستبداله ب "YYYY-MM-DD"

".log" لا ينتمي إلى deadformat

يمكنني استخدام ما يلي:

<param name="DatePattern" value="yyyy.MM.dd.\l\o\g"/>

مع هذا أحصل على أسماء الملفات مثل: 2009.02.23.log

يحاول <datePattern value=".yyyy-MM-dd.lo\g" /> أنا لا أفهم ما هو g ل.

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