2017-11-29 10 views
0

Windowsサービスとして実行できるコンソールアプリケーションを実装しました(.NET console application as Windows serviceとよく似ています)。Log4netは古い日付の新しいファイルを作成します

  • .NETフレームワーク4
  • log4netの2.0.8

これはlog4netの設定である:

<?xml version="1.0" encoding="utf-8" ?> 
<log4net> 

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="Log\App_%date{yyyy-MM-dd}.log" type="log4net.Util.PatternString" /> 
    <appendToFile value="true" /> 
    <param name="maxSizeRollBackups" value="5" /> 
    <rollingStyle value="Composite" /> 
    <datePattern value="yyyy-MM-dd" /> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <acceptOnMatch value="true" /> 
    </filter> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%-3thread] %-5level %logger - %message%newline" /> 
    </layout> 
    </appender> 

    <root> 
    <level value="ALL" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
    </root> 
</log4net> 

Main(string[] args)に非常に最初の行はlog4netの初期化である:

XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config")); 

ロガーは、このようProgramクラスの先頭に初期化されます。

private static readonly ILog _log = LogManager.GetLogger(typeof(Program)); 

サービスが開始されると/再起動またはコンソールアプリケーションは、正しいファイル名で作成されたログファイルを、手動で実行され、例えばApp_2017-11-29.log。しかし、夜間にWindowsサービスを稼働させておくと、真夜中に新しい日付のファイルが作成され、古いファイルがyesterdaysの日付に追加されます。私は今日のサービスを開始し、3日間実行し、それを残すのであれば、たとえば、これは、ログファイルに

  • App_2017-11-29.log(現在のログファイル)
  • App_2017-11-29になります.log2017-12-01
  • App_2017-11-29.log2017-11-30
  • App_2017-11-29.log2017-11-29

なぜこれが起こっているすべてのアイデア?

答えて

2

要素は "ベース"ファイル名を決定し、アプリケーションの起動時に一度決定され、その後に<datePattern value="" />が追加され、指定された形式の現在の日付に置き換えられます。

は、だからあなたの設定は次のようになります。多くのことを説明し

<rollingStyle value="Composite" /> 
<file value="Log\App_" type="log4net.Util.PatternString" /> 
<datePattern value="yyyy-MM-dd'.log'" /> 
<staticLogFileName value="false" /> 
+0

を!また、なぜWebアプリケーションでは時にはうまく動作しない場合もあります(プールリサイクル)。試してみて、あなたの答えを受け入れるでしょう! –

+0

私はこれを試してみましたが、 "App_"ファイル名、日付パターンはありませんか? –

+0

だから私はこのようにstaticLogFileNameをfalseに設定しなければなりません。 これはうまくいかないのでしょうか? (ドキュメントは常に同じファイルに書き込むことになりますが、その場合は常に1つのファイルしかありません) –

関連する問題