LogWriter
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class LogWriter {
private static final Logger logger = LoggerFactory.getLogger(LogWriter.class);
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
private void logMsg(File logFile, String msgInfo) throws IOException {
if (!logFile.exists()) {
boolean newFile = logFile.createNewFile();
logger.info("logFile Create Success:" + newFile);
}
Writer txtWriter = new FileWriter(logFile, true);
txtWriter.write(dateFormat.format(new Date()) + "\t" + msgInfo + "\n");
txtWriter.flush();
txtWriter.close();
}
private void stop() {
if (exec != null) {
exec.shutdown();
logger.info("logFile Writer Stop !");
}
}
public static void main(String[] args) {
final LogWriter logWriter = new LogWriter();
final File file = new File("E:/baihb/mock.log");
final String msgInfo = "LogWriter:";
exec.scheduleWithFixedDelay(() -> {
try {
int random = new Random().nextInt(10);
logWriter.logMsg(file, msgInfo + random);
logger.info("logFile Writer msgInfo:" + msgInfo + random);
} catch (Exception e) {
logger.error("logFile Writer Error ! ");
}
}, 0, 1, TimeUnit.SECONDS);
}
}
LogReader
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.RandomAccessFile;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class LogReader {
private long pointer = 0;
private static final Logger logger = LoggerFactory.getLogger(LogReader.class);
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
private void realTimeShowLog(File logFile) {
if (logFile == null) {
throw new IllegalStateException("logFile not Exist");
}
exec.scheduleWithFixedDelay(() -> {
try {
long len = logFile.length();
if (len < pointer) {
logger.info("Log file was reset , Restarting logging from start of file");
pointer = 0;
} else {
RandomAccessFile randomAccessFile = new RandomAccessFile(logFile, "rw");
System.out.println("RandomAccessFile文件指针的初始位置:" + pointer);
randomAccessFile.seek(pointer);
String tmp = "";
while ((tmp = randomAccessFile.readLine()) != null) {
System.out.println("info : " + new String(tmp.getBytes("utf-8")));
pointer = randomAccessFile.getFilePointer();
}
randomAccessFile.close();
}
} catch (Exception e) {
logger.error(dateFormat.format(new Date()) + " File read error, pointer: " + pointer);
} finally {
}
}, 0, 3, TimeUnit.SECONDS);
}
private void stop() {
if (exec != null) {
exec.shutdown();
logger.info("logFile Reader Stop !");
}
}
public static void main(String[] args) {
LogReader reader = new LogReader();
final File file = new File("E:/baihb/mock.log");
reader.pointer = 0;
reader.realTimeShowLog(file);
}
}