通过FileSystemWatcher减少受监视文件的数量

时间:2018-06-10 23:29:48

标签: c# .net

我的Windows服务应用程序每秒都会将日志写入文件夹中的文件。我想监视日志活动,如果一段时间没有记录,则会发出错误信号。

以下是日志文件名的示例。一次只写入最新的日志文件,不写入其他文件。 Monitor应用程序仅关注最后一个日志文件。

MyApplication.MachineName.2018-06-05.log

MyApplication.MachineName.2018-06-04.001.log

以下是监视日志活动的代码。

   private  void WatchFileChanges()
    {
        // Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = @"C:\Logs";
        /* Watch for changes in LastWrite times */
        watcher.NotifyFilter = NotifyFilters.LastWrite;
        // Only watch text files.
        watcher.Filter = "*.log";

        // Add event handlers.
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);


        // Begin watching.
        watcher.EnableRaisingEvents = true;       

    }

    // Define the event handlers.
    private  void OnChanged(object source, FileSystemEventArgs e)
    {           
        Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);         
    }

问题:

有没有办法减少文件夹下受监控的日志文件数量?例如,仅监视今天或最近两天的日志文件,而不是文件夹中的所有文件。由于内部缓冲区有限,因此多余的日志文件可能会导致监视无法正常工作。

1 个答案:

答案 0 :(得分:2)

你需要在这里获得一些创意,最简单的方法就是FileSystemWatcher.Filter Property

  

获取或设置用于确定文件的过滤器字符串   在目录中监控。

<强>说明

  

要观察所有文件中的更改,请将Filter属性设置为空   字符串("")。要观看特定文件,请将Filter属性设置为   文件名。例如,要监视文件MyDoc.txt中的更改,   将Filter属性设置为"MyDoc.txt"。您还可以观察更改   在某种类型的文件中。例如,要注意任何变化   文本文件,将Filter属性设置为"*.txt"。使用多个   不支持"*.txt|*.doc"等过滤器。

其他一些例子

  
      
  • *.*:所有文件(默认)。空字符串(&#34;&#34;)也会监视所有文件。

  •   
  • *.txt:所有带有&#34; txt&#34;的文件扩展

  •   
  • *recipe.doc:所有文件以&#34; recipe&#34;结尾用&#34; doc&#34;扩展

  •   
  • win*.xml:以&#34; win&#34;开头的所有文件使用&#34; xml&#34;扩展

  •   
  • Sales*200?.xls

         
        
    • 匹配以下内容:      
          
      • Sales July 2001.xls
      •   
      • Sales Aug 2002.xls
      •   
      • Sales March 2004.xls
      •   
    •   
    • 但不匹配:      
          
      • 销售额11月1999.xls
      •   
    •   
  •   
  • MyReport.Doc:仅观看MyReport.doc

  •   

现在有了这些信息,您可以轻松确定是否可以为当前日期日志创建过滤器,如果可以,则可以每天动态更改过滤器以定位这些日志。如文档中所述

  

可以在FileSystemWatcher对象后更改Filter属性   已开始接受活动。

或者如评论中所述,

  • 将日志放在不同的文件夹中
  • 如果您使用的是日志记录框架名称,那么您的日志在当天会有所不同,因此他们会#34;&#34;靶向
  • 或者增加FileSystemWatcher缓冲区并监控所有内容

这是你的使命,如果你选择接受它。