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实时监控日志文件并输出的方法详解相关推荐

  1. java 查询sql语句_java执行SQL语句实现查询的通用方法详解

    完成sql查询 并将查询结果放入vector容器,以便其他程序使用 /* * 执行sql查询语句 */ public static vector executequery(class clazz, s ...

  2. java读取日志_Java实时监控日志文件并输出的方法详解

    前言 最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据 ...

  3. java文件下载controller_Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...

  4. java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...

  5. java解析json数据_java解析JSON数据详解

    JSON是目前最流行的轻量级数据交换语言(没有之一).尽管他是javaScript的一个子集.但由于其是独立与语言的文本格式,它几乎可以被所有编程语言所支持. 以下是对java语言中解析json数据的 ...

  6. java中flush函数作用_Java语言中flush()函数作用及使用方法详解

    最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写 ...

  7. Zabbix与ELK整合实现对安全日志数据的实时监控告警

    微信公众号:运维开发故事,作者:double冬 1 ELK与ZABBIX有什么关系? ELK大家应该比较熟悉了,zabbix应该也不陌生,那么将ELK和zabbix放到一起的话,可能大家就有疑问了?这 ...

  8. java object取数据_java使用ObjectInputStream从文件中读取对象

    import java.io.EOFException; import java.io.FileInputStream; import java.io.FileNotFoundException; i ...

  9. java注解式开发_JAVA语言之Spring MVC注解式开发使用详解[Java代码]

    本文主要向大家介绍了JAVA语言的Spring MVC注解式开发使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处 ...

最新文章

  1. 仲兆鹏 160809329 第5次
  2. shell脚本参数$10问题
  3. SonarQube代码质量管理工具安装与使用(sonarqube5.1.2 + sonar-runner-dist-2.4 + MySQL5.x)
  4. 【mxnet速成】mxnet图像分类从模型自定义到测试
  5. Copy List with Random Pointer
  6. JS获取元素的offsetTop,offsetLeft等相关属性
  7. Codeforces Round #703 (Div. 2) Guessing the Greatest C1 C2 二分
  8. java ews_Java---使用EWS 写个ExchangeMailUtil
  9. HTML5简易在线画图工具
  10. java cl 規格_Java JavaCL類代碼示例
  11. 这些都是当年在C/C++上折的地儿…
  12. Python 目录及文件操作(os.模块)
  13. gc日志怎么看_JVM探秘:GC日志收集与分析
  14. [Unity][AssetStore][PacakageManager]2020.1版本后的AssetStore如何下载资源并导入编辑器以及Error refreshing packages解决办法
  15. github 从0开始的基本操作到fork和pr项目
  16. OAuth三方授权登录
  17. 【整理】关于Android图形系统的一些事实真相
  18. 开发一个在线Excel系统?SpreadJS让开发如此简单
  19. 初中英语知识水平测试软件,美国初中生英文水平测试!百个单词检测,看看你认识几个...
  20. Chrome插件开发-右键菜单开启页面编辑

热门文章

  1. kindeditor图片上传 struts2实现
  2. 动态规划--目标和问题
  3. [javaSE] 数组(排序-冒泡排序)
  4. 年度最期待游戏废土2登陆Linux
  5. 7 天玩转 ASP.NET MVC — 第 6 天
  6. Python GUI编程(Tkinter)
  7. 清除webBrowser 缓存和Cookie的解决方案
  8. W3wp.exe占用CPU及内存资源
  9. java中集合的结构Set类型
  10. 面试:史上最全多线程面试题 - (锁内存模型线程)