我目前正在寻找一种监控文件更改的好方法。
情况: 我正在运行Teamspeak3服务器,它会创建.log文件。每个创业公司。平行地,有一个运行java bot,使用服务器查询api。
不幸的是,如果要捕获重要事件(如服务器组分配等),则groupspeak的查询api非常受限制。这些是由服务器捕获并记录的,但不会被触发到查询客户端。
我的想法是监控服务器的* .log文件,对文件更改做出反应,并通过最新的文件条目解析实际事件。
我的问题是,每次发现更改时我都会读取整个文件。我的意思是,这些文件很容易达到10mb ++,并且取决于ts3服务器"人口",经常发生变化。
使用java.nio.file很容易监视文件(或者说dir,确切) 但我怎么只读最后一行?
我现在无法想到一个优雅的方法来处理这个问题。
感谢帮助和建议!
西达
答案 0 :(得分:0)
您可以将commons-io ReversedLinesFileReader与WatchService API结合使用。 https://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/input/ReversedLinesFileReader.html
https://docs.oracle.com/javase/tutorial/essential/io/notification.html
根据这些事件的频率,这可能不是最高效的。缺少事件也可能是片状的。您必须跟踪已经处理过的事件。拖尾日志文件并从StandardIn处理输入方式可能是更好的选择。