我的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);
}问题:
有没有办法减少文件夹下监控的日志文件数量?例如,仅监视今天或最近两天的日志文件,而不是文件夹中的所有文件。由于内部缓冲区有限,过多的日志文件可能会导致监控无法工作。
发布于 2018-06-11 09:24:52
这里需要有一点创意,最简单的方法就是使用FileSystemWatcher.Filter Property
获取或设置筛选器字符串,该字符串用于确定在目录中监视哪些文件。
备注
若要监视所有文件中的更改,请将Filter属性设置为空字符串(
"")。若要监视特定文件,请将Filter属性设置为文件名。例如,若要监视文件筛选器中的更改,请将MyDoc.txt属性设置为"MyDoc.txt"。您还可以监视特定类型的文件中的更改。例如,若要监视任何文本文件中的更改,请将Filter属性设置为"*.txt"。不支持使用多个筛选器,例如"*.txt|*.doc"。
更多示例
*.*:所有文件(默认)。空字符串("")还监视所有files.*.txt:所有以"txt“extension.*recipe.doc结尾的文件:所有以”extension.win*.xml“结尾的文件:所有以”files.*.txt“开头并带有"xml”extension.Sales*200?.xls的文件:- Matches the following:
- Sales July 2001.xls
- Sales Aug 2002.xls
- Sales March 2004.xls
- but does not match:
- Sales Nov 1999.xls
MyReport.Doc:仅观看MyReport.doc有了这些信息,您就可以轻松地确定是否可以为当天的日志创建筛选器,如果可以,则可以每天动态更改筛选器以针对这些日志。如文档中所述
在FileSystemWatcher对象开始接收事件后,可以更改
的Filter属性。
或者就像评论中提到的,
#en0#If>如果您使用的是日志记录框架,请将当天的日志命名为当天的不同日志,这样它们就可以将当天的日志放在不同的文件夹中,这样就可以增加
FileSystemWatcher 如果你选择接受,这就是你的使命。
https://stackoverflow.com/questions/50788918
复制相似问题