2011-11-27 63 views
1

我想將Enterprise Library Logger配置爲寫入文件,直到達到指定的大小。
我到達指定尺寸後,我想它做下列之一:
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> 

感謝您的幫助

+0

信息:我目前使用的EntLib 4.1 我看到,在EntLib 5有MaximumLogFilesBeforePurge選項 – hamoub

回答

2

所以,沒有辦法單獨配置。
我的解決方案是在輸出文件夾中添加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); 
     } 
    } 

希望這篇文章可以幫助別人誰看起來對於s UCH解決方案

巴拉克Hamou

0

看起來不像企業庫4.1 Rolling Flat File Trace Listener有這樣的配置選項。

如果更改爲rollFileExistsBehavior="Increment",然後創建將刪除除最近兩個文件以外的所有文件的計劃任務,該怎麼辦?

+0

增量標誌增加了一個新的文件時,曾經的文件已滿。它不限制創建的新文件的數量。 – hamoub

+0

我知道。企業庫4.1似乎沒有提供配置選項來完成你想要的功能。我試圖爲您提供解決方法。 – MLF

相關問題