LOG4NET ROLLINGFILEAPPENDER مع نمط المتداول المركب هو البيانات المسبقة

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

سؤال

لدي Log4net RollingfilePpender تم تكوينه على النحو التالي:

<configuration>

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <log4net>

    <root>
      <level value="ALL" />
    </root>

    <logger name="RollingFileAppender" additivity="false">
      <level value="DEBUG"/>
      <appender-ref ref="RollingFileAppender" />
    </logger>

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
      <param name="File" value="C:\\MyLog.log" />
      <param name="AppendToFile" value="true" />
      <param name="DatePattern" value="yyyy-MM-dd"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%m%n"/>
      </layout>
    </appender>

  </log4net>

</configuration>

أنظر إلى توثيق, ، ال نمط المتداول الافتراضي هو مركب, ، لذلك من المنطقي أن يدلف هذا عندما يصل حجم معين (الافتراضي 10 ميغابايت)، وليس فقط في التاريخ.

المشكلة هي عندما تضرب الحجم، يتم إعادة تشغيل السجل وأفقد البيانات من النصف الأول من اليوم (يصل إلى هذا الحجم حول الظهر).
لماذا لا تدلف هذا لفة فقط إلى ملف جديد ووضع جميع خطوط السجل المستقبلية في mylog.log؟ أو هل هو السجل هو المتداول، ولكن بعد ذلك في منتصف الليل، يتدحرج مرة أخرى والكتابة فوق السجل المؤرخ (على سبيل المثال. المتداول إلى mylog.log2009-04-08 بمجرد وصوله إلى 10 ميغابايت، ثم اكتشاف هذا الملف نفسه في منتصف الليل)؟

سأقوم بتعيين

<rollingStyle value="Date" />

هل هذا كل ما علي فعله لضمان لفاته فقط في حدود التاريخ؟ هل يمكنني تغيير هذا أثناء الطيران في log4net.config، أو هل يجب علي إعادة تشغيل التطبيق؟ إنه يعمل على IIS6.

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

المحلول

ها هي الإعدادات الخاصة بي. انها لفات فقط في التاريخ:

<log4net>
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
        <file value="c:\Logs\Today.log"/>
        <rollingStyle value="Date"/>
        <datePattern value="yyyyMMdd"/>
        <appendToFile value="true"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level %logger %date{ISO8601} - %message%newline"/>
        </layout>
    </appender>
    <root>
        <!-- Options are "ALL", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" and "OFF". -->
        <level value="ERROR"/>
        <appender-ref ref="RollingFile"/>
    </root>
</log4net>

التغييرات في Web.config، ستقوم بإعادة تشغيل التطبيق تلقائيا (حتى تفقد جلسات، إلخ).

نصائح أخرى

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

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
  <param name="File" value="C:\\MyLog.log" />
  <param name="AppendToFile" value="true" />
  <param name="DatePattern" value="yyyy-MM-dd"/>
  <param name="maxSizeRollBackups" value="10" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%m%n"/>
  </layout>
</appender>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top