/// <summary> /// Closes the file(s) opened for writing. /// </summary> protected override void CloseTarget() { base.CloseTarget(); foreach (string fileName in new List<string>(this.initializedFiles.Keys)) { this.WriteFooterAndUninitialize(fileName); } if (this.autoClosingTimer != null) { this.autoClosingTimer.Change(Timeout.Infinite, Timeout.Infinite); this.autoClosingTimer.Dispose(); this.autoClosingTimer = null; } for (int i = 0; i < this.recentAppenders.Length; ++i) { if (this.recentAppenders[i] == null) { break; } this.recentAppenders[i].Close(); this.recentAppenders[i] = null; } }
/// <summary> /// Initializes file logging by creating data structures that /// enable efficient multi-file logging. /// </summary> protected override void InitializeTarget() { base.InitializeTarget(); if (!this.KeepFileOpen) { this.appenderFactory = RetryingMultiProcessFileAppender.TheFactory; } else { if (this.ArchiveAboveSize != -1 || this.ArchiveEvery != FileArchivePeriod.None) { if (this.NetworkWrites) { this.appenderFactory = RetryingMultiProcessFileAppender.TheFactory; } else if (this.ConcurrentWrites) { #if NET_CF || SILVERLIGHT this.appenderFactory = RetryingMultiProcessFileAppender.TheFactory; #elif MONO // // mono on Windows uses mutexes, on Unix - special appender // if (PlatformDetector.IsUnix) { this.appenderFactory = UnixMultiProcessFileAppender.TheFactory; } else { this.appenderFactory = MutexMultiProcessFileAppender.TheFactory; } #else this.appenderFactory = MutexMultiProcessFileAppender.TheFactory; #endif } else { this.appenderFactory = CountingSingleProcessFileAppender.TheFactory; } } else { if (this.NetworkWrites) { this.appenderFactory = RetryingMultiProcessFileAppender.TheFactory; } else if (this.ConcurrentWrites) { #if NET_CF || SILVERLIGHT this.appenderFactory = RetryingMultiProcessFileAppender.TheFactory; #elif MONO // // mono on Windows uses mutexes, on Unix - special appender // if (PlatformDetector.IsUnix) { this.appenderFactory = UnixMultiProcessFileAppender.TheFactory; } else { this.appenderFactory = MutexMultiProcessFileAppender.TheFactory; } #else this.appenderFactory = MutexMultiProcessFileAppender.TheFactory; #endif } else { this.appenderFactory = SingleProcessFileAppender.TheFactory; } } } this.recentAppenders = new BaseFileAppender[this.OpenFileCacheSize]; if ((this.OpenFileCacheSize > 0 || this.EnableFileDelete) && this.OpenFileCacheTimeout > 0) { this.autoClosingTimer = new Timer( this.AutoClosingTimerCallback, null, this.OpenFileCacheTimeout * 1000, this.OpenFileCacheTimeout * 1000); } // Console.Error.WriteLine("Name: {0} Factory: {1}", this.Name, this.appenderFactory.GetType().FullName); }