/// <summary>
        /// Initializes a new instance of the <see cref="FileAppenderCache"/> class.
        /// </summary>
        /// <remarks>
        /// The size of the list should be positive. No validations are performed during initialisation as it is an
        /// intenal class.
        /// </remarks>
        /// <param name="size">Total number of appenders allowed in list.</param>
        /// <param name="appenderFactory">Factory used to create each appender.</param>
        /// <param name="createFileParams">Parameters used for creating a file.</param>
        public FileAppenderCache(int size, IFileAppenderFactory appenderFactory, ICreateFileParameters createFileParams)
        {
            Size = size;
            Factory = appenderFactory;
            CreateFileParameters = createFileParams;

            appenders = new BaseFileAppender[Size];
        }
 public void FileAppenderCache_GetFileCharacteristics_Windows()
 {
     if (NLog.Internal.PlatformDetector.IsDesktopWin32)
     {
         IFileAppenderFactory  appenderFactory = WindowsMultiProcessFileAppender.TheFactory;
         ICreateFileParameters fileTarget      = new FileTarget()
         {
             ArchiveNumbering = ArchiveNumberingMode.Date
         };
         FileAppenderCache_GetFileCharacteristics(appenderFactory, fileTarget);
     }
 }
示例#3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="FileAppenderCache"/> class.
        /// </summary>
        /// <remarks>
        /// The size of the list should be positive. No validations are performed during initialisation as it is an
        /// intenal class.
        /// </remarks>
        /// <param name="size">Total number of appenders allowed in list.</param>
        /// <param name="appenderFactory">Factory used to create each appender.</param>
        /// <param name="createFileParams">Parameters used for creating a file.</param>
        public FileAppenderCache(int size, IFileAppenderFactory appenderFactory, ICreateFileParameters createFileParams)
        {
            Size = size;
            Factory = appenderFactory;
            CreateFileParameters = createFileParams;

            appenders = new BaseFileAppender[Size];

#if !SILVERLIGHT && !__IOS__ && !__ANDROID__
            externalFileArchivingWatcher.OnChange += ExternalFileArchivingWatcher_OnChange;
#endif
        }
示例#4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="FileAppenderCache"/> class.
        /// </summary>
        /// <remarks>
        /// The size of the list should be positive. No validations are performed during initialisation as it is an
        /// intenal class.
        /// </remarks>
        /// <param name="size">Total number of appenders allowed in list.</param>
        /// <param name="appenderFactory">Factory used to create each appender.</param>
        /// <param name="createFileParams">Parameters used for creating a file.</param>
        public FileAppenderCache(int size, IFileAppenderFactory appenderFactory, ICreateFileParameters createFileParams)
        {
            Size    = size;
            Factory = appenderFactory;
            CreateFileParameters = createFileParams;

            appenders = new BaseFileAppender[Size];

#if !SILVERLIGHT && !__IOS__ && !__ANDROID__
            externalFileArchivingWatcher.FileChanged += ExternalFileArchivingWatcher_OnFileChanged;
#endif
        }
示例#5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="FileAppenderCache"/> class.
        /// </summary>
        /// <remarks>
        /// The size of the list should be positive. No validations are performed during initialisation as it is an
        /// intenal class.
        /// </remarks>
        /// <param name="size">Total number of appenders allowed in list.</param>
        /// <param name="appenderFactory">Factory used to create each appender.</param>
        /// <param name="createFileParams">Parameters used for creating a file.</param>
        public FileAppenderCache(int size, IFileAppenderFactory appenderFactory, ICreateFileParameters createFileParams)
        {
            Size    = size;
            Factory = appenderFactory;
            CreateFileParameters = createFileParams;

            _appenders = new BaseFileAppender[Size];

            _autoClosingTimer = new Timer(AutoClosingTimerCallback, null, Timeout.Infinite, Timeout.Infinite);

#if !SILVERLIGHT && !__IOS__ && !__ANDROID__ && !NETSTANDARD1_3
            _externalFileArchivingWatcher.FileChanged += ExternalFileArchivingWatcher_OnFileChanged;
#endif
        }
示例#6
0
        private void FileAppenderCache_GetFileCharacteristics(IFileAppenderFactory appenderFactory, ICreateFileParameters fileParameters)
        {
            // Invoke GetFileCharacteristics() on an Empty FileAppenderCache.
            FileAppenderCache emptyCache = FileAppenderCache.Empty;

            Assert.Null(emptyCache.GetFileCreationTimeSource("file.txt"));
            Assert.Null(emptyCache.GetFileLastWriteTimeUtc("file.txt"));
            Assert.Null(emptyCache.GetFileLength("file.txt"));

            FileAppenderCache cache = new FileAppenderCache(3, appenderFactory, fileParameters);

            // Invoke GetFileCharacteristics() on non-empty FileAppenderCache - Before allocating any appenders.
            Assert.Null(emptyCache.GetFileCreationTimeSource("file.txt"));
            Assert.Null(emptyCache.GetFileLastWriteTimeUtc("file.txt"));
            Assert.Null(emptyCache.GetFileLength("file.txt"));


            String tempFile = Path.Combine(
                Path.GetTempPath(),
                Path.Combine(Guid.NewGuid().ToString(), "file.txt")
                );

            // Allocate an appender.
            BaseFileAppender appender = cache.AllocateAppender(tempFile);

            appender.Write(StringToBytes("NLog test string."));

            //
            // Note: Encoding is ASSUMED to be Unicode. There is no explicit reference to which encoding will be used
            //      for the file.
            //

            // File information should be returned.

            var fileCreationTimeUtc = cache.GetFileCreationTimeSource(tempFile);

            Assert.NotNull(fileCreationTimeUtc);
            Assert.True(fileCreationTimeUtc > Time.TimeSource.Current.FromSystemTime(DateTime.UtcNow.AddMinutes(-2)), "creationtime is wrong");

            var fileLastWriteTimeUtc = cache.GetFileLastWriteTimeUtc(tempFile);

            Assert.NotNull(fileLastWriteTimeUtc);
            Assert.True(fileLastWriteTimeUtc > DateTime.UtcNow.AddMinutes(-2), "lastwrite is wrong");

            Assert.Equal(34, cache.GetFileLength(tempFile));

            // Clean up.
            appender.Flush();
            appender.Close();
        }
示例#7
0
        public void FileAppenderCache_GetFileInfo()
        {
            DateTime lastWriteTime;
            long     fileLength;

            // Invoke GetFileInfo() on an Empty FileAppenderCache.
            FileAppenderCache emptyCache = FileAppenderCache.Empty;

            emptyCache.GetFileInfo("file.txt", out lastWriteTime, out fileLength);
            // Default values will be returned.
            Assert.True(lastWriteTime == DateTime.MinValue);
            Assert.True(fileLength == -1);

            IFileAppenderFactory  appenderFactory = SingleProcessFileAppender.TheFactory;
            ICreateFileParameters fileTarget      = new FileTarget();
            FileAppenderCache     cache           = new FileAppenderCache(3, appenderFactory, fileTarget);

            // Invoke GetFileInfo() on non-empty FileAppenderCache - Before allocating any appenders.
            cache.GetFileInfo("file.txt", out lastWriteTime, out fileLength);
            // Default values will be returned.
            Assert.True(lastWriteTime == DateTime.MinValue);
            Assert.True(fileLength == -1);

            String tempFile = Path.Combine(
                Path.GetTempPath(),
                Path.Combine(Guid.NewGuid().ToString(), "file.txt")
                );

            // Allocate an appender.
            BaseFileAppender appender = cache.AllocateAppender(tempFile);

            appender.Write(StringToBytes("NLog test string."));

            //
            // Note: Encoding is ASSUMED to be Unicode. There is no explicit reference to which encoding will be used
            //      for the file.
            //

            // File information should be returned.
            cache.GetFileInfo(tempFile, out lastWriteTime, out fileLength);
            Assert.False(lastWriteTime == DateTime.MinValue);
            Assert.True(fileLength == 34);

            // Clean up.
            appender.Flush();
            appender.Close();
        }
        public void FileAppenderCache_GetFileCharacteristics()
        {
            // Invoke GetFileCharacteristics() on an Empty FileAppenderCache.
            FileAppenderCache emptyCache = FileAppenderCache.Empty;

            Assert.Null(emptyCache.GetFileCharacteristics("file.txt"));

            IFileAppenderFactory  appenderFactory = SingleProcessFileAppender.TheFactory;
            ICreateFileParameters fileTarget      = new FileTarget();
            FileAppenderCache     cache           = new FileAppenderCache(3, appenderFactory, fileTarget);

            // Invoke GetFileCharacteristics() on non-empty FileAppenderCache - Before allocating any appenders.
            Assert.Null(cache.GetFileCharacteristics("file.txt"));

            String tempFile = Path.Combine(
                Path.GetTempPath(),
                Path.Combine(Guid.NewGuid().ToString(), "file.txt")
                );

            // Allocate an appender.
            BaseFileAppender appender = cache.AllocateAppender(tempFile);

            appender.Write(StringToBytes("NLog test string."));

            //
            // Note: Encoding is ASSUMED to be Unicode. There is no explicit reference to which encoding will be used
            //      for the file.
            //

            // File information should be returned.
            var fileCharacteristics = cache.GetFileCharacteristics(tempFile);

            Assert.NotNull(fileCharacteristics);
            Assert.NotEqual(DateTime.MinValue, fileCharacteristics.CreationTimeUtc);
            Assert.Equal(34, fileCharacteristics.FileLength);

            // Clean up.
            appender.Flush();
            appender.Close();
        }
示例#9
0
文件: File.cs 项目: tdhieu/openvss
        /// <summary>
        /// Initializes file logging by creating data structures that
        /// enable efficient multi-file logging.
        /// </summary>
        public override void Initialize()
        {
            base.Initialize ();

            if (!KeepFileOpen)
            {
                _appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
            }
            else
            {
                if (_archiveAboveSize != -1 || _archiveEvery != ArchiveEveryMode.None)
                {
                    if (NetworkWrites)
                    {
                        _appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
                    }
                    else if (ConcurrentWrites)
                    {
#if NETCF
                        _appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
#elif MONO
                        //
                        // mono on Windows uses mutexes, on Unix - special appender
                        //
                        if (PlatformDetector.IsCurrentOSCompatibleWith(RuntimeOS.Unix))
                            _appenderFactory = UnixMultiProcessFileAppender.TheFactory;
                        else
                            _appenderFactory = MutexMultiProcessFileAppender.TheFactory;
#else
                        _appenderFactory = MutexMultiProcessFileAppender.TheFactory;
#endif
                    }
                    else
                    {
                        _appenderFactory = CountingSingleProcessFileAppender.TheFactory;
                    }
                }
                else
                {
                    if (NetworkWrites)
                    {
                        _appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
                    }
                    else if (ConcurrentWrites)
                    {
#if NETCF
                        _appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
#elif MONO
                        //
                        // mono on Windows uses mutexes, on Unix - special appender
                        //
                        if (PlatformDetector.IsCurrentOSCompatibleWith(RuntimeOS.Unix))
                            _appenderFactory = UnixMultiProcessFileAppender.TheFactory;
                        else
                            _appenderFactory = MutexMultiProcessFileAppender.TheFactory;
#else
                        _appenderFactory = MutexMultiProcessFileAppender.TheFactory;
#endif
                    }
                    else
                    {
                        _appenderFactory = SingleProcessFileAppender.TheFactory;
                    }
                }
            }

            _recentAppenders = new BaseFileAppender[OpenFileCacheSize];

            if ((OpenFileCacheSize > 0 || EnableFileDelete) && OpenFileCacheTimeout > 0)
            {
                _autoClosingTimer = new Timer(new TimerCallback(this.AutoClosingTimerCallback), null, OpenFileCacheTimeout * 1000, OpenFileCacheTimeout * 1000);
            }

            // Console.Error.WriteLine("Name: {0} Factory: {1}", this.Name, _appenderFactory.GetType().FullName);
        }
示例#10
0
        /// <summary>
        ///     Initializes file logging by creating data structures that
        ///     enable efficient multi-file logging.
        /// </summary>
        protected override void InitializeTarget()
        {
            base.InitializeTarget();

            if (!KeepFileOpen)
            {
                appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
            }
            else
            {
                if (ArchiveAboveSize != -1 || ArchiveEvery != FileArchivePeriod.None)
                {
                    if (NetworkWrites)
                    {
                        appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
                    }
                    else if (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
                        appenderFactory = MutexMultiProcessFileAppender.TheFactory;
            #endif
                    }
                    else
                    {
                        appenderFactory = CountingSingleProcessFileAppender.TheFactory;
                    }
                }
                else
                {
                    if (NetworkWrites)
                    {
                        appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
                    }
                    else if (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
                        appenderFactory = MutexMultiProcessFileAppender.TheFactory;
            #endif
                    }
                    else
                    {
                        appenderFactory = SingleProcessFileAppender.TheFactory;
                    }
                }
            }

            recentAppenders = new BaseFileAppender[OpenFileCacheSize];

            if ((OpenFileCacheSize > 0 || EnableFileDelete) && OpenFileCacheTimeout > 0)
            {
                autoClosingTimer = new Timer(
                    AutoClosingTimerCallback,
                    null,
                    OpenFileCacheTimeout*1000,
                    OpenFileCacheTimeout*1000);
            }

            // Console.Error.WriteLine("Name: {0} Factory: {1}", this.Name, this.appenderFactory.GetType().FullName);
        }
示例#11
0
文件: FileTarget.cs 项目: sorvis/NLog
        /// <summary>
        /// Initializes file logging by creating data structures that
        /// enable efficient multi-file logging.
        /// </summary>
        protected override void InitializeTarget()
        {
            base.InitializeTarget();
            this.appenderFactory = GetFileAppenderFactory();

            this.fileAppenderCache = new FileAppenderCache(this.OpenFileCacheSize, this.appenderFactory, this);
            RefreshArchiveFilePatternToWatch();

            if ((this.OpenFileCacheSize > 0 || this.EnableFileDelete) && this.OpenFileCacheTimeout > 0)
            {
                this.autoClosingTimer = new Timer(
                    this.AutoClosingTimerCallback,
                    null,
                    this.OpenFileCacheTimeout * 1000,
                    this.OpenFileCacheTimeout * 1000);
            }
        }
示例#12
0
        /// <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.IsCurrentOSCompatibleWith(RuntimeOS.Unix))
                        {
                            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.IsCurrentOSCompatibleWith(RuntimeOS.Unix))
                        {
                            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);
        }
示例#13
0
        /// <summary>
        /// Initializes file logging by creating data structures that
        /// enable efficient multi-file logging.
        /// </summary>
        protected override void InitializeTarget()
        {
            base.InitializeTarget();
            this.appenderFactory = GetFileAppenderFactory();

            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);
        }
示例#14
0
        private void FileAppenderCache_GetFileCharacteristics(IFileAppenderFactory appenderFactory, ICreateFileParameters fileParameters)
        {
            // Invoke GetFileCharacteristics() on an Empty FileAppenderCache.
            FileAppenderCache emptyCache = FileAppenderCache.Empty;
            Assert.Null(emptyCache.GetFileCreationTimeUtc("file.txt", false));
            Assert.Null(emptyCache.GetFileLastWriteTimeUtc("file.txt", false));
            Assert.Null(emptyCache.GetFileLength("file.txt", false));
          
            FileAppenderCache cache = new FileAppenderCache(3, appenderFactory, fileParameters);
            // Invoke GetFileCharacteristics() on non-empty FileAppenderCache - Before allocating any appenders. 
            Assert.Null(emptyCache.GetFileCreationTimeUtc("file.txt", false));
            Assert.Null(emptyCache.GetFileLastWriteTimeUtc("file.txt", false));
            Assert.Null(emptyCache.GetFileLength("file.txt", false));


            String tempFile = Path.Combine(
                    Path.GetTempPath(),
                    Path.Combine(Guid.NewGuid().ToString(), "file.txt")
            );

            // Allocate an appender.
            BaseFileAppender appender = cache.AllocateAppender(tempFile);
            appender.Write(StringToBytes("NLog test string."));

            //
            // Note: Encoding is ASSUMED to be Unicode. There is no explicit reference to which encoding will be used 
            //      for the file. 
            //

            // File information should be returned.
           
            var fileCreationTimeUtc = cache.GetFileCreationTimeUtc(tempFile, false);
            Assert.NotNull(fileCreationTimeUtc);
            Assert.True(fileCreationTimeUtc > DateTime.UtcNow.AddMinutes(-2),"creationtime is wrong");

            var fileLastWriteTimeUtc = cache.GetFileLastWriteTimeUtc(tempFile, false);
            Assert.NotNull(fileLastWriteTimeUtc);
            Assert.True(fileLastWriteTimeUtc > DateTime.UtcNow.AddMinutes(-2), "lastwrite is wrong");

            Assert.Equal(34, cache.GetFileLength(tempFile, false));

            // Clean up.
            appender.Flush();
            appender.Close();
        }
示例#15
0
 public void FileAppenderCache_GetFileCharacteristics_Multi()
 {
     IFileAppenderFactory appenderFactory = MutexMultiProcessFileAppender.TheFactory;
     ICreateFileParameters fileTarget = new FileTarget() { ArchiveNumbering = ArchiveNumberingMode.Date, ForceManaged = true };
     FileAppenderCache_GetFileCharacteristics(appenderFactory, fileTarget);
 }
示例#16
0
 public void FileAppenderCache_GetFileCharacteristics_Single()
 {
     IFileAppenderFactory appenderFactory = SingleProcessFileAppender.TheFactory;
     ICreateFileParameters fileTarget = new FileTarget() { ArchiveNumbering = ArchiveNumberingMode.Date };
     FileAppenderCache_GetFileCharacteristics(appenderFactory, fileTarget);
 }
示例#17
0
        /// <summary>
        /// Initializes file logging by creating data structures that
        /// enable efficient multi-file logging.
        /// </summary>
        public override void Initialize()
        {
            base.Initialize();

            if (!KeepFileOpen)
            {
                _appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
            }
            else
            {
                if (_archiveAboveSize != -1 || _archiveEvery != ArchiveEveryMode.None)
                {
                    if (NetworkWrites)
                    {
                        _appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
                    }
                    else if (ConcurrentWrites)
                    {
#if NETCF
                        _appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
#elif MONO
                        //
                        // mono on Windows uses mutexes, on Unix - special appender
                        //
                        if (PlatformDetector.IsCurrentOSCompatibleWith(RuntimeOS.Unix))
                        {
                            _appenderFactory = UnixMultiProcessFileAppender.TheFactory;
                        }
                        else
                        {
                            _appenderFactory = MutexMultiProcessFileAppender.TheFactory;
                        }
#else
                        _appenderFactory = MutexMultiProcessFileAppender.TheFactory;
#endif
                    }
                    else
                    {
                        _appenderFactory = CountingSingleProcessFileAppender.TheFactory;
                    }
                }
                else
                {
                    if (NetworkWrites)
                    {
                        _appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
                    }
                    else if (ConcurrentWrites)
                    {
#if NETCF
                        _appenderFactory = RetryingMultiProcessFileAppender.TheFactory;
#elif MONO
                        //
                        // mono on Windows uses mutexes, on Unix - special appender
                        //
                        if (PlatformDetector.IsCurrentOSCompatibleWith(RuntimeOS.Unix))
                        {
                            _appenderFactory = UnixMultiProcessFileAppender.TheFactory;
                        }
                        else
                        {
                            _appenderFactory = MutexMultiProcessFileAppender.TheFactory;
                        }
#else
                        _appenderFactory = MutexMultiProcessFileAppender.TheFactory;
#endif
                    }
                    else
                    {
                        _appenderFactory = SingleProcessFileAppender.TheFactory;
                    }
                }
            }

            _recentAppenders = new BaseFileAppender[OpenFileCacheSize];

            if ((OpenFileCacheSize > 0 || EnableFileDelete) && OpenFileCacheTimeout > 0)
            {
                _autoClosingTimer = new Timer(new TimerCallback(this.AutoClosingTimerCallback), null, OpenFileCacheTimeout * 1000, OpenFileCacheTimeout * 1000);
            }

            // Console.Error.WriteLine("Name: {0} Factory: {1}", this.Name, _appenderFactory.GetType().FullName);
        }