如果我不断解析日志文件并发现它已经旋转,处理此问题的最佳做法是什么?
我担心的是,在情况异常的情况下没有。如上所述,我可能会从一开始就间接解析一个大文件并对主机施加很大的负担。 但是,如果我不使用。 1我可能会错过一些关键的东西,我正在解析日志文件。
这是我放在一起的代码。
currentFilePointer = util.FileManagement.getLastFilePointerFromFile(file.getName());
lastFilePointer = Long.parseLong(lastReadFiles_.get(file.getName()).toString());
if (currentFilePointer < lastFilePointer) // file has grown
{
processLineByLine(file.getName(), currentFilePointer, lastFilePointer);
} else if (currentFilePointer > lastFilePointer) // file has been rotated
{
lastReadFiles_.put(file.getName(), currentFilePointer); // Option 1
}
答案 0 :(得分:0)
从您发布的代码中,我看不到任何Hashmap ...很难说哪个解决方案更好:)
这是我用来“尾随”文件的一段代码,它也支持旋转(在一个单独的线程中运行):
@Override
public void start() {
File file = ...
long filePointer = 0;
try {
while (running) {
Thread.sleep(updateInterval);
long len = file.length();
if (len < filePointer) {
// File was rotated
filePointer = 0;
} else if (len > filePointer) {
// File must have had something added to it!
RandomAccessFile raf = new RandomAccessFile(file, "r");
raf.seek(filePointer);
// Here you can read the next lines using for example a BufferedReader
filePointer = raf.getFilePointer();
raf.close();
}
}
} catch (Exception e) {
// ...
}
}
答案 1 :(得分:0)
我认为您的问题是如何管理日志文件。这样的操作可以使用像bash这样的脚本语言或像python这样的通用脚本语言来完成。使用java的广泛教程是managing Logs for the Java Subsystems。