我正在尝试实现一个日志拖尾,它将在前一个文件被删除并被新文件(永远)替换后继续拖尾。所以,每次我们重新启动服务器(打印日志)时,我都不必运行这个程序。
这是我的代码。
public void tail(String file) throws InterruptedException, IOException {
waitUntilFileExist(file);
File f = new File(file);
BufferedReader br = new BufferedReader(new FileReader(file.trim()));
br.skip(f.length());
String line = null;
while (f.exists()) {
f = new File(file);
line = br.readLine();
if (line == null) {
Thread.sleep(1000);
} else {
if (msl != null) {
//Send line to attached interface
msl.onMessage(line);
}
}
}
waitUntilFileExist(file);
tail(file);
}
public void waitUntilFileExist(String file) throws InterruptedException {
File f = new File(file);
if (!f.exists()) {
System.out.println("File doesn't exists");
Thread.sleep(1000);
waitUntilFileExist(file);
} else {
System.out.println("File does exists");
}
}
首先,它会检查指定的文件是否存在?虽然它确实存在,但读取文件并打印该行。如果文件在读取过程中被删除,它会等到文件被重新创建后再调用tail方法。
我在 Linux 机器上对此进行了测试,它工作正常,但我不确定这是否是正确的方法。你有其他方法可以做到这一点吗?这适用于几天和几个月的生产环境吗?