我的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);
}
问题:
有没有办法减少文件夹下受监控的日志文件数量?例如,仅监视今天或最近两天的日志文件,而不是文件夹中的所有文件。由于内部缓冲区有限,因此多余的日志文件可能会导致监视无法正常工作。
答案 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属性 已开始接受活动。
或者如评论中所述,
FileSystemWatcher
缓冲区并监控所有内容这是你的使命,如果你选择接受它。