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
なぜこれが起こっているすべてのアイデア?
を!また、なぜWebアプリケーションでは時にはうまく動作しない場合もあります(プールリサイクル)。試してみて、あなたの答えを受け入れるでしょう! –
私はこれを試してみましたが、 "App_"ファイル名、日付パターンはありませんか? –
だから私はこのようにstaticLogFileNameをfalseに設定しなければなりません。 これはうまくいかないのでしょうか? (ドキュメントは常に同じファイルに書き込むことになりますが、その場合は常に1つのファイルしかありません) –