代码之家  ›  专栏  ›  技术社区  ›  Pingpong

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

  •  2
  • Pingpong  · 技术社区  · 6 年前

    我的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 回复  |  直到 6 年前
        1
  •  2
  •   Flater    6 年前

    你需要有点创意,最简单的方法就是 FileSystemWatcher.Filter Property

    获取或设置用于确定哪些文件的筛选字符串。 在目录中监视。

    评论

    若要监视所有文件中的更改,请将筛选器属性设置为空 琴弦( "" )若要监视特定文件,请将筛选器属性设置为 文件名。例如,监视文件中的更改 MyDoc.txt , 将筛选器属性设置为 "MyDoc.txt" . 你也可以观察变化。 在某种类型的文件中。例如,观察任何 文本文件,将筛选器属性设置为 "*.txt" . 多次使用 过滤器,如 "*.txt|*.doc" 不支持。

    再举几个例子

    • *.* :所有文件(默认)。空字符串(“”)还监视所有文件。

    • *.txt :所有扩展名为“txt”的文件。

    • *recipe.doc :以“recipe”结尾并带有“doc”扩展名的所有文件。

    • win*.xml :以“win”开头、扩展名为“xml”的所有文件。

    • Sales*200?.xls :

      • 符合以下条件:
        • 2001年7月销售.xls
        • 2002年8月销售.xls
        • 2004年3月销售.xls
      • 但不匹配:
        • 1999年11月销售.xls
    • MyReport.Doc :仅监视myreport.doc

    现在有了这些信息,您可以轻松地确定是否可以为当前的天日志创建过滤器,如果可以,那么您可以动态地更改过滤器以针对这些日志。如文件所述

    筛选器属性可以在 FileSystemWatcher 对象 已开始接收事件。

    或如评论中所述,

    • 或者将日日志放在另一个文件夹中
    • 如果您使用的是一个日志框架名称,那么您的日志在当前日期是不同的,因此它们“是”目标
    • 或者增加 文件系统监视程序 缓冲和监视一切

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