| 
想实现tail功能,搜了一堆代码,好复杂。  想着apache是否有现成的,一搜真有,
 使用好简单啊,哈哈
 
 
 package com.why;
 
 import java.io.File;
 import java.nio.charset.Charset;
 import java.util.Timer;
 import java.util.TimerTask;
 
 import org.apache.commons.io.input.Tailer;
 import org.apache.commons.io.input.TailerListener;
 import org.apache.commons.io.input.TailerListenerAdapter;
 
 public class MyTail {
 
 public static void main(String[] args) {
 
 String path = "D:\\xxxx\\log\\yyyy.log";
 
 // 监听
 TailerListener listener = new TailerListenerAdapter() {
 
 StringBuilder sb = new StringBuilder();
 
 //每一行新内容会回调它
 @Override
 public void handle(final String line) {
 sb.append(line).append("\r\n嘎");
 }
 
 //读到末尾会回调它
 public void endOfFileReached() {
 System.out.println("---------------");
 System.out.println(sb.toString());
 sb.setLength(0);
 }
 };
 
 // 创建Tailer,新线程执行
 // 1000是读取间隔毫秒数
 // true,从文件末尾开始,false从开头开始,会把文件内容都打印出来
 // false,是否每次reOpen文件
 // 4096,读文件的bufferSize
 final Tailer tailer = Tailer.create(new File(path), Charset.forName("UTF-8"), listener, 1000, true, false, 4096);
 
 // 定时器,60秒后,停止tailer
 Timer t = new Timer();
 t.schedule(new TimerTask() {
 @Override
 public void run() {
 tailer.stop();
 System.out.println("tailer end");
 }
 }, 60 * 1000);
 }
 
 }
 
 
 
 Tailer大概原理就是,查看文件大小,有变化,就从上次位置开始读取,
 每行触发一次监听者的handle方法
 读完触发一次监听者的endOfFileReached方法。
 
 我这里,把每次读取内容拼起来了,打算发到服务端,方便远程tail日志。
 然后跑十分钟,就自动关掉tailer。
 想看再发指令过来,再开。
 
 |