最近写了的一个项目,开始的目的是同步静态资源的,后来想想可以增加一个远程tail的功能,就是把不同服务器上面的日志文件,通过tail的方式汇总到某一台服务器,这样一些分布式的系统的日志可以被汇总起来查看,方便追踪问题。
具体的代码请移步
http://git.oschina.net/grom/rainy
PS:想要加入该项目开发的同志,请积极联系我。
后期开发计划:
1. Mbean实时监控和属性更改
2. 静态资源启动时同步hash比对同步
I am looking for you!
1.[代码][Java]代码
public void run() {
long filePointer = 0;
if (this.startAtBeginning) {
filePointer = 0;
} else {
filePointer = this.targetFile.length();
}
try {
this.tailing = true;
RandomAccessFile file = new RandomAccessFile(targetFile, "r");
while (this.tailing) {
WatchKey key = watchService.take();
for (WatchEvent> event : key.pollEvents()) {
System.out.println("[Tail monitor ] " + event.context() + " " + event.kind() + " was triggered");
}
long fileLength = this.targetFile.length();
System.out.println("fileLength : " + fileLength);
if (fileLength == 0) {
System.out.println("fileLength : " + fileLength);
Thread.sleep(sampleInterval);
System.out.println("Sleep : " + sampleInterval);
key.reset();
continue;
}
if (fileLength < filePointer && fileLength != 0) {
file = new RandomAccessFile(targetFile, "r");
filePointer = 0;
}
if (fileLength > filePointer) {
file.seek(filePointer);
String line = file.readLine();
while (line != null) {
line = new String(line.getBytes("8859_1"), tailFileCharSet);
this.fireNewLogFileLine(targetFile.getName(), line);
line = file.readLine();
}
filePointer = file.getFilePointer();
}
key.reset();
}
file.close();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}