diff --git a/src/NLog/Internal/FileAppenders/FileAppenderCache.cs b/src/NLog/Internal/FileAppenders/FileAppenderCache.cs index ec5e3afe15..1925c70a62 100644 --- a/src/NLog/Internal/FileAppenders/FileAppenderCache.cs +++ b/src/NLog/Internal/FileAppenders/FileAppenderCache.cs @@ -115,7 +115,7 @@ private void ExternalFileArchivingWatcher_OnFileChanged(object sender, FileSyste if (logFileWasArchived) { if (autoClosingTimer != null) - autoClosingTimer.Change(50, 1000); + autoClosingTimer.Change(50, Timeout.Infinite); } } @@ -297,8 +297,6 @@ public BaseFileAppender AllocateAppender(string fileName) } externalFileArchivingWatcher.Watch(appenderToWrite.FileName); // Monitor the active file-appender #endif - if (freeSpot == 0) - autoClosingTimer.Change(1000, 1000); // Check every second } } diff --git a/src/NLog/Targets/FileTarget.cs b/src/NLog/Targets/FileTarget.cs index 5e306247f1..409a1faac1 100644 --- a/src/NLog/Targets/FileTarget.cs +++ b/src/NLog/Targets/FileTarget.cs @@ -100,6 +100,8 @@ public class FileTarget : TargetWithLayoutHeaderAndFooter, ICreateFileParameters /// private FileAppenderCache fileAppenderCache; + private Timer autoClosingTimer; + /// /// The number of initialised files at any one time. /// @@ -750,7 +752,7 @@ private void RefreshArchiveFilePatternToWatch() this.fileAppenderCache.CheckCloseAppenders -= AutoClosingTimerCallback; #if !SILVERLIGHT && !__IOS__ && !__ANDROID__ - if (KeepFileOpen || OpenFileCacheTimeout > 0) + if (KeepFileOpen) this.fileAppenderCache.CheckCloseAppenders += AutoClosingTimerCallback; bool mustWatchArchiving = IsArchivingEnabled() && ConcurrentWrites && KeepFileOpen; @@ -773,9 +775,6 @@ private void RefreshArchiveFilePatternToWatch() { this.fileAppenderCache.ArchiveFilePatternToWatch = null; } -#else - if (OpenFileCacheTimeout > 0) - this.fileAppenderCache.CheckCloseAppenders += AutoClosingTimerCallback; #endif } } @@ -921,6 +920,15 @@ protected override void InitializeTarget() this.fileAppenderCache = new FileAppenderCache(this.OpenFileCacheSize, this.appenderFactory, this); RefreshArchiveFilePatternToWatch(); + + if ((this.OpenFileCacheSize > 0 || this.EnableFileDelete) && this.OpenFileCacheTimeout > 0) + { + this.autoClosingTimer = new Timer( + (state) => this.AutoClosingTimerCallback(this, EventArgs.Empty), + null, + this.OpenFileCacheTimeout * 1000, + this.OpenFileCacheTimeout * 1000); + } } /// @@ -935,6 +943,13 @@ protected override void CloseTarget() this.FinalizeFile(fileName); } + if (this.autoClosingTimer != null) + { + this.autoClosingTimer.Change(Timeout.Infinite, Timeout.Infinite); + this.autoClosingTimer.Dispose(); + this.autoClosingTimer = null; + } + this.fileAppenderCache.CloseAppenders("Dispose"); this.fileAppenderCache.Dispose(); }