Конфигурация Enterprise Library Logger - PullRequest
1 голос
/ 27 ноября 2011

Я хочу настроить Enterprise Library Logger для записи в файл, пока он не достигнет указанного размера.
После того, как я достигну указанного размера, я бы хотел выполнить одно из следующих действий:

  • Сверните файл (удаляйте старые строки журнала и добавляйте новые, а не очищайте весь файл).
  • Сохраните содержимое в файле и очистите файл журнала (сохраните только один файл резервной копии).

В настоящее время у меня есть конфигурация для одного файла, который очищается при каждом заполнении файла. Это моя конфигурация

<listeners>
  <add fileName="C:\ProgramData\Hamoub\Log\TransferLog.log" 
       formatter="Text Formatter" 
       header="----------------------------------------"
       rollFileExistsBehavior="Overwrite" 
       rollSizeKB="100000" 
       listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
       traceOutputOptions="None" 
       filter="All" 
       type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
       name="Rolling Flat File Trace Listener"/>
</listeners>

Спасибо за вашу помощь

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

Итак, нет способа сделать это только в конфигурации.Моим решением было добавить FileSystemWatcher в выходную папку, и всякий раз, когда там создавался новый файл, я проверял, нужно ли удаление.Я заказал файлы папок перед удалением, поэтому будут удалены только старые файлы (с сохранением текущих и предыдущих файлов журнала).

Код наблюдателя:

        try
        {
            FileSystemWatcher fsw = new FileSystemWatcher(@"C:\ProgramData\Hamoub\Log");
            fsw.EnableRaisingEvents = true;
            fsw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite |
                   NotifyFilters.DirectoryName | NotifyFilters.FileName;
            fsw.Created += new FileSystemEventHandler(FileCreatedOnLogFolder);
        }
        catch (Exception ex)
        {
            Logger.Log("Failed creating file system watcher: " + ex.Message, Severity.Warning);
        }

Код обработчика:

    void FileCreatedOnLogFolder(object sender, FileSystemEventArgs e)
    {
        try
        {
            DirectoryInfo logsDir = new DirectoryInfo(@"C:\ProgramData\Hamoub\Log");
            var logFiles = logsDir.GetFiles("*TransferServiceTrace*.log");
            var orderedLogFiles = logFiles.OrderBy(e => e.CreationTime);

            if (orderedLogFiles.Count() > 1)
            {
                Logger.Log("Maintenance is needed, More than 2 log files found", Severity.Verbose);
                for (int i = 0; i < orderedLogFiles.Count() - 2; i++)
                {
                    try
                    {
                        var toDeleteFile = (orderedLogFiles.ElementAt(i) as FileInfo);
                        if (toDeleteFile != null)
                        {
                            toDeleteFile.Delete();
                        }
                    }
                    catch (Exception)
                    {
                        Logger.Log("Can't delete log file " + (orderedLogFiles.ElementAt(i) as FileInfo).Name, Severity.Warning);
                    }
                }
                // Store last file as TransferService.Last.Log
                (orderedLogFiles.ElementAt(orderedLogFiles.Count() - 2) as FileInfo).CopyTo(Path.Combine(logsDir.FullName, "TransferService.Last.Log"), true);
                (orderedLogFiles.ElementAt(orderedLogFiles.Count() - 2) as FileInfo).Delete();
            }
        }
        catch (Exception ex)
        {
            Logger.Log("Error during folder maintenance. " + ex.Message, Severity.Warning);
        }
    }

Надеюсь, этоПост поможет тому, кто ищет такое решение

Барак Хаму

0 голосов
/ 01 декабря 2011

Не похоже на Enterprise Library 4.1 Прослушиватель трассировки плоских файлов с плавающей запятой имеет такую ​​опцию конфигурации.

Что если вы измените значение на rollFileExistsBehavior="Increment", а затем создадите запланированное задание, которое удалит все, кроме двух самых последних файлов?

...