java tail文件读取_java实现的文件tail的方法

本文介绍了一个用于汇总分布式系统日志的项目,通过tail方式将不同服务器的日志文件集中到一台服务器上进行统一查看与追踪,便于问题定位。此外还规划了Mbean实时监控等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近写了的一个项目,开始的目的是同步静态资源的,后来想想可以增加一个远程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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值