C#:用于文本文件的尾部程序

我有一个日志文件,不断记录短线。 我需要开发一个服务来响应(或轮询或监听)添加到该文件的新行,这是一种unix’尾程序,因此我的服务始终是最新的文件。

我不认为打开读取流并保持打开是一个好主意。 也许我应该使用FileSystemWatcher类。

长话短说,我需要实时解析添加到此文件的每一个新行。

任何想法的帮助或指示真的很感激。

编辑

我一直不太清楚。 我不需要任何程序,我正在编写程序。 用于读取(然后处理)添加到文件的每个新行。 我的意思是我正在寻找的是一种方法论(或者:如何实现这个?),以便不断地跟踪一直保持写入的文件。

我必须开发一个“侦听”此文件并在每个新行上执行操作的Windows服务。

因此,如果在给定时刻文件是:

12.31.07 - jdoe [log on] 347 12.32.08 - ssmith [log on] 479 12.32.08 - mpeterson [log off] 532 12.32.09 - apacino [log on] 123 

在线的那一刻

 12.32.11 - pchorr [log on] 127 

由日志记录程序(我无法访问)添加到日志文件中,我需要我的Windows服务“对行成瘾”做出反应,拦截新行( 12.32.11 - pchorr [log on] 127 )和处理它。 等等。

现在,我不知道该怎么做。 我应该每隔n秒轮询一次文件,将最后一条读取行存储在内存中并仅处理新添加的行。 这个问题很慢,而且我每次都会读一个非常大的文件。

或者也许我可以使用FileSystemWatcher ,但我没有找到任何将它用于类似目的的示例。

那么,你建议你做什么工作? 谢谢。

我建议使用FileSystemWatcher通知您所关注的文件或文件的更改。 从那里,我会缓存诸如事件之间的文件大小等信息,并添加一些逻辑以仅响应整行等。您可以使用FileStream类的Seek()方法跳转到文件中的特定点并从那里只读。 鉴于这些function,如果您需要的话,手动滚动此function应该不会太难。

将使用简单的解决方案,示例代码在http://www.codeproject.com/Articles/7568/Tail-NET文章中提供。 它只是一个function复制/粘贴到您的代码中。

请务必注意,Microsoft(自vista / svr08)更新文件时不再更新文件元数据(例如服务更新的日志文件)。

例如,在更新日志文件的服务/程序关闭文件之前, 不会更新诸如修改日期之类的文件的元数据。

因此, FileSystemWatcher不会像您期望的那样捕获日志文件更新。

https://blogs.technet.microsoft.com/asiasupp/2010/12/14/file-date-modified-property-are-not-updating-while-modifying-a-file-without-closing-it/

你还没有真正解释你是否需要一个类似于尾巴的Windows程序,即http://www.baremetalsoft.com/baretail/,或者如果你想要一个windows版本的尾巴(使用cygwin)或者你正在寻找一些一种日志监控API ….