目的
实时监听多个目录下的日志文件,如有新文件切换到新文件,并同步写入kafka,同时记录日志文件的行位置,以应对进程异常退出,能从上次的文件位置开始读取(考虑到效率,这里是每100条记一次,可调整)
源码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
import java.util.Random;
import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
;
public class XTail_Line {
public static class TailFileThread extends Thread
{
File file;
LineNumberReader randomFile=null;
String newfile=null;
String thisfile=null;
String prefile=null;
private long lastTimeFileSize = 0;
private String drname=null;
int ln=0;
int beginln=0;
private Producer<String,String> inner;
java.util.Random ran = new Random();
String topicname=null;
public TailFileThread(String path,String drname,