11

次のように構成された Log4Net RollingFileAppender があります。

<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>

documentationを見ると、デフォルトのローリングスタイルは Compositeであるため、日付だけでなく、特定のサイズ (デフォルトの 10MB) に達したときにローリングするのは理にかなっています。

問題は、サイズに達すると、ログが再開され、その日の前半のデータが失われることです (正午頃にこのサイズに達します)。
これを新しいファイルにロールアウトして、今後のすべてのログ行を MyLog.log に記録しないのはなぜでしょうか? または、ログはローリングされていますが、真夜中に再びローリングされ、日付付きのログが上書きされます (たとえば、10MB に達すると MyLog.log2009-04-08 にローリングされ、真夜中にこの同じファイルが上書きされます)?

を設定します

<rollingStyle value="Date" />

日付の境界でのみロールするようにするために私がしなければならないことはこれだけですか? Log4Net.config でこれをオンザフライで変更できますか、それともアプリケーションを再起動する必要がありますか? IIS6で実行しています。

4

2 に答える 2

13

これが私の設定です。日付のみにロールします。

<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 を変更すると、アプリケーションが自動的に再起動されます (セッションが失われるなど)。

于 2009-04-09T16:44:52.643 に答える
9

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>
于 2009-04-10T04:37:01.107 に答える