2011-11-27 75 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

相关问题