java解析日志数据_Java实时监控日志文件并输出的方法详解
Java實時監控日志文件并輸出的方法詳解
想在前臺顯示數據同步過程中產生的日志文件,在網上找到解決方案,做了代碼測試好用。這里做個記錄
java.io.RandomAccessFile可以解決同時向文件讀和寫.為了模擬這個問題,編寫LogSvr和 LogView類,LogSvr不斷向mock.log日志文件寫數據,而 LogView則實時輸出日志變化部分的數據.
代碼1:日志產生類
package com.fbkj.genelog;
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.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class LogSvr {
private SimpleDateFormat dateFormat =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 將信息記錄到日志文件
* @param logFile 日志文件
* @param mesInfo 信息
* @throws IOException
*/
public void logMsg(File logFile,String mesInfo) throws IOException{
if(logFile == null) {
throw new IllegalStateException("logFile can not be null!");
}
Writer txtWriter = new FileWriter(logFile,true);
txtWriter.write(dateFormat.format(new Date()) +"\t"+mesInfo+"\n");
txtWriter.flush();
}
public static void main(String[] args) throws Exception{
final LogSvr logSvr = new LogSvr();
String userdir = System.getProperty("user.dir");
final File tmpLogFile = new File(userdir+"/mock.log");
if(!tmpLogFile.exists()) {
tmpLogFile.createNewFile();
}
//啟動一個線程每5秒鐘向日志文件寫一次數據
ScheduledExecutorService exec =
Executors.newScheduledThreadPool(1);
exec.scheduleWithFixedDelay(new Runnable(){
public void run() {
try {
logSvr.logMsg(tmpLogFile, " 99bill test !");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}, 0, 5, TimeUnit.SECONDS);
}
}
代碼2:顯示日志的類
package com.fbkj.genelog;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class LogView {
private long lastTimeFileSize = 0; //上次文件大小
/**
* 實時輸出日志信息
* @param logFile 日志文件
* @throws IOException
*/
public void realtimeShowLog(File logFile) throws IOException{
//指定文件可讀可寫
final RandomAccessFile randomFile = new RandomAccessFile(logFile,"rw");
//啟動一個線程每10秒鐘讀取新增的日志信息
ScheduledExecutorService exec =
Executors.newScheduledThreadPool(1);
exec.scheduleWithFixedDelay(new Runnable(){
public void run() {
try {
//獲得變化部分的
randomFile.seek(lastTimeFileSize);
String tmp = "";
while( (tmp = randomFile.readLine())!= null) {
System.out.println(new String(tmp.getBytes("ISO8859-1")));
}
lastTimeFileSize = randomFile.length();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}, 0, 1, TimeUnit.SECONDS);
}
public static void main(String[] args) throws Exception {
String userdir = System.getProperty("user.dir");
LogView view = new LogView();
final File tmpLogFile = new File(userdir+"/mock.log");
view.realtimeShowLog(tmpLogFile);
}
}
先執行LogSvr類,LogSvr類會啟動一個線程,每5秒鐘向mock.log日志文件寫一次數據,
然后再執行LogView類,LogView每隔1秒鐘讀一次,如果數據有變化則輸出變化的部分.
總結
以上是生活随笔為你收集整理的java解析日志数据_Java实时监控日志文件并输出的方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 肚子左边疼是怎么回事(女人肚子左边疼是什
- 下一篇: 椰子鞋带系法(椰子鞋最普通鞋带系法)