- 浏览: 875761 次
- 性别:
- 来自: 美国图森
最新评论
-
jnjeC:
jake_12345 写道大哥,这写错了吧Class.isAs ...
Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别 -
lgh1992314:
https://my.oschina.net/xianggao ...
Servlet生命周期 -
qq412796770:
大哥,百度第一条就是你的,好歹也修改一下吧
Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别 -
技术无涯苦作舟:
大哥,百度第一条就是你的,好歹也修改一下吧
Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别 -
lgh1992314:
大哥,百度第一条就是你的,好歹也修改一下吧
Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别
最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据是新增加的,通过查看JDK 的帮助文档, java.io.RandomAccessFile
可以解决这个问题.为了模拟这个问题,编写LogSvr和 LogView类,LogSvr不断向mock.log日志文件写数据,而 LogView则实时输出日志变化部分的数据.
代码1:日志产生类
package com.bill99.seashell.domain.svr; 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; /** *<p>title: 日志服务器</p> *<p>Description: 模拟日志服务器</p> *<p>CopyRight: CopyRight (c) 2010</p> *<p>Company: 99bill.com</p> *<p>Create date: 2010-6-18</P> *@author Tank Zhang<tank.zhang@99bill.com> *@version v0.1 2010-6-18 */ 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(); final File tmpLogFile = new File("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.bill99.seashell.domain.client; 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 { LogView view = new LogView(); final File tmpLogFile = new File("mock.log"); view.realtimeShowLog(tmpLogFile); } }
执行LogSvr类,LogSvr类会启动一个线程,每5秒钟向mock.log日志文件写一次数据,然后再执行LogView类,LogView每隔1秒钟读一次,如果数据有变化则输出变化的部分.
结果输出:
2010-06-19 17:25:54 99bill test !
2010-06-19 17:25:59 99bill test !
2010-06-19 17:26:04 99bill test !
2010-06-19 17:26:09 99bill test !
2010-06-19 17:26:14 99bill test !
2010-06-19 17:26:19 99bill test !
PS:
代码修改过, 有朋友下载了我的代码,说如果是中文会乱码,将日志输出类的第30行的代码
System.out.println(tmp)改成 System.out.println(new String(tmp.getBytes("ISO8859-1"))),就会正常显示中文.
评论
13 楼
m244020165
2012-10-20
sunnylocus 写道
奇迹海 写道
楼主,看了下你描述的功能正和我现在想实现的类似。可是我的是要实时输出到页面上,该怎么做?
这个简单呀,我做过,用ajax每隔一称钟获取新增长的信息,然后显示到页面就可以了。手里有源代码,需要的话发到你邮箱里。
楼主我也想要一份,邮箱:ml02151513@163.com。麻烦楼主了!
12 楼
laoma102
2012-10-12
sunnylocus 写道
奇迹海 写道
楼主,看了下你描述的功能正和我现在想实现的类似。可是我的是要实时输出到页面上,该怎么做?
这个简单呀,我做过,用ajax每隔一称钟获取新增长的信息,然后显示到页面就可以了。手里有源代码,需要的话发到你邮箱里。
我想要一份,laoma102@126.com 谢啦
11 楼
yuanqixun
2012-08-10
嗯,这个我也实现了。
10 楼
sunnylocus
2012-08-09
奇迹海 写道
楼主,看了下你描述的功能正和我现在想实现的类似。可是我的是要实时输出到页面上,该怎么做?
这个简单呀,我做过,用ajax每隔一称钟获取新增长的信息,然后显示到页面就可以了。手里有源代码,需要的话发到你邮箱里。
9 楼
奇迹海
2012-08-07
楼主,看了下你描述的功能正和我现在想实现的类似。可是我的是要实时输出到页面上,该怎么做?
8 楼
boy_yu521
2012-07-30
RandomAccessFile不需要关闭吗?
7 楼
sangshuye
2012-02-24
写的都挺好的
6 楼
sunnylocus
2012-01-13
javaeye官理员 写道
文件从头部插入怎么处理啊?
这个没有考虑到,有空我想想
5 楼
javaeye官理员
2012-01-12
文件从头部插入怎么处理啊?
4 楼
sunnylocus
2011-12-31
mahengyang 写道
如果日志滚动的话,大小岂不是要变化?那监控还能正常吗〈〉?
呵呵,你说的这个问题正是我这个博客所说的解决方案。日志滚动也能实时输出新增的那部分日志,你可以将代码拷贝下来试试。
3 楼
mahengyang
2011-12-31
如果日志滚动的话,大小岂不是要变化?那监控还能正常吗〈〉?
2 楼
sunnylocus
2011-03-04
yuanqixun 写道
你好,如果是要观察例如服务器jboss的日志输出呢?我说的是远端服务器的。
那么是不是要在那个logFile上是一个url地址呢?
那么是不是要在那个logFile上是一个url地址呢?
这个问题问的好! 但是logFile不能是一个url地址,如果logFile是一个网络文件,程序会从流里读取数据的,如果从流里读数据是无法确定这个文件的大小及这个文件已经传输了多少。如果想实现这样的功能可以这样做:
1、在 是jboss服务器写一个程序,这个程序负责读取变化部分的日志信息并将信息post到接收端
2、在你监控端写一个程序,负责接收服务端传来的消息(socket或着servlet都可以),这 样就能实时监控服务器了
1 楼
yuanqixun
2011-03-04
你好,如果是要观察例如服务器jboss的日志输出呢?我说的是远端服务器的。
那么是不是要在那个logFile上是一个url地址呢?
那么是不是要在那个logFile上是一个url地址呢?
发表评论
-
人在江湖:如何用代码保护自己
2011-10-12 16:30 11433现在上一点规模的 ... -
Spring freemarker页面乱码解决
2011-01-13 11:56 7566在开发过程中遇到乱码十分的头痛,如果你在开发过程中也遇 ... -
数据漂白算法研究
2010-12-07 18:05 3830你的手机是不是 ... -
理解使用static import 机制
2010-11-09 08:48 3237J2SE 1.5里引入了“Sta ... -
理解多线程设计模式
2010-11-08 17:43 10547多线程设计模式:1.Single Threaded Execu ... -
理解ThreadLocal
2010-11-03 17:04 1967ThreadLocal是什么 早在JDK 1 ... -
经验总结:高性能的数据同步
2010-11-03 10:03 6457最近在做一个银行的生产数据脱敏系统,今天写代码时遇到 ... -
用JSSE实现网络安全通信
2010-06-25 15:11 3898在网络上信息由源主机到目标主机要经过很多路由和计算机, ... -
Junit测试private方法
2010-04-28 14:09 8077package com.bill99.junit; pu ... -
保护眼睛的豆沙色
2010-03-19 09:46 3602作我们IT这行的,一天要盯着电脑看,时间长了眼睛会感觉发酸 ... -
中国联通短信网关接入程序源代码(SGIP1.2协议)
2010-01-11 12:23 43305自从我发了博文“中国联通SP业务开发总结”后有很多的朋友问 ... -
Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别
2009-12-24 13:14 67560原地址:http://topic.csdn.net/t/200 ... -
非阻塞通信
2009-12-03 11:43 4670对于用ServerSocket和Socket写的服务 ... -
处理线程泄露
2009-12-01 15:10 8629当一个单线程化 ... -
在Timer和ScheduledExecutorService间决择
2009-11-27 10:25 13430java.util.Timer计时器有管理任务延迟执行(& ... -
Socket通信模式:收发线程互斥
2009-11-14 19:09 8783有做过通信程序或着短信接入程序的程序员都知道,与之 ... -
ASCII码对照表
2009-11-12 11:26 2600ASCII表 ASCII值 控制字符 ASC ... -
java.net.SocketException: Software caused connection abort: recv failed 异常分析
2009-11-12 11:01 15826java.net.SocketException: Softw ... -
用State模式减少if..elseif语句
2009-11-03 17:20 7130我们在写程序的过 ... -
HttpURLConnection设置网络超时
2009-10-29 17:30 9512Java中可以使用HttpURLConnection来请 ...
相关推荐
Java实时监控日志文件并输出的方法详解是指在Java中通过某些技术手段来实时监控日志文件,并将其输出到前台页面上。这种方法在实际开发中非常有价值,特别是在需要实时监控日志文件的场景下。 在Java中,我们可以...
总的来说,这个“java日志文件过滤”项目提供了一个便捷的工具,帮助开发者快速处理和分析日志数据,提高了问题排查和系统监控的效率。通过学习和理解这个项目,你可以深化对Java日志处理、文件I/O和条件过滤等技术...
对于`FileHandler`,你可以设置文件的命名模式,比如按照日期生成不同的日志文件: ```properties java.util.logging.FileHandler.pattern = %h/java%u.log ``` 这里,`%h`代表用户的家目录,`%u`是一个解决冲突的...
文件中内容包括模块中某个类单独输出到一个日志文件中、模块中某个package单独输出到一个日志文件中、同一模块不同package输出到一个日志文件中三种情况下log4j.properties配置项配置事例、Java类中代码如何一致编写...
在Java编程中,日志是记录应用程序运行过程中的事件、错误...总的来说,理解和配置好日志文件对于Java开发者来说至关重要,它可以帮助我们更好地理解程序运行情况,定位和解决问题,同时也有助于系统的长期监控和维护。
`tail`命令的主要功能是在终端中动态显示日志文件的尾部内容,这对于开发者和系统管理员来说非常实用,因为它允许他们实时监控系统运行状态,及时发现并解决问题。在Linux中,`tail`命令的基本用法是`tail -f 文件名...
1. **无需读取日志文件**:传统方式下,日志通常被写入到磁盘文件中,然后由其他进程读取分析。这种方式存在延迟,并且可能导致大量磁盘I/O。通过WebSocket,日志可以直接从应用程序发送到前端,省去了读取文件的...
要创建多个自定义日志文件,你需要定义多个`Appender`,并为每个`Appender`指定不同的日志级别、输出格式和输出路径。 以下是一个基础的Log4j配置示例,它将日志同时输出到控制台和名为`test.log`的文件: ```...
在Windows服务器环境中,管理和监控日志文件是系统管理员日常任务的重要组成部分。日志文件记录了系统、应用程序和服务的各种活动,对于故障排查、性能优化以及安全分析至关重要。标题提到的"windows服务器动态刷新...
5. **日志输出**:设置标准输出和错误输出重定向到特定的日志文件,便于后期分析和故障排查。 6. **停止命令**:通常通过发送信号(如`SIGTERM`)给Java进程来优雅地关闭服务。 了解了启动脚本的基本结构后,我们...
Linux的`tail -f`命令是系统管理员常用的监控日志文件变化的工具。`tail`命令用于查看文件的尾部,而`-f`选项使得命令能够持续监控文件,当文件有新的内容追加时,会立即显示出来。在日志实时推送中,`tail -f`可以...
7. **日志管理和分析**:日志文件生成后,可以通过工具进行查看、检索和分析,以发现潜在的问题、追踪错误来源或者进行性能评估。 总之,Java Lo4j是一个强大的日志框架,它为开发者提供了灵活的日志管理能力,有助...
在实际项目中,通常会构建一个服务端应用,该应用定期收集远程系统的数据,并存储到数据库或者日志文件中。客户端则可以通过HTTP、HTTPS或其他通信协议与服务端交互,请求或订阅特定的监控数据。服务端还可以提供...
8. **日志归档和滚动**:自动处理旧日志的归档和新日志的创建,防止日志文件过大导致的问题。 9. **远程日志传输**:支持将日志发送到中央日志服务器,便于集中管理和分析。 10. **日志审计**:对于关键操作,可以...
总的来说,"Java简易日志组件"提供了一种简单的方法来管理和监控Java应用程序的运行状态。通过理解和掌握其使用方法,开发者能够更好地调试和维护自己的程序,提升开发效率。而提供的配置和示例Demo则使得学习和上手...
Java跨域实例与日志文件是前端开发与后端服务交互过程中常见的技术点。在Web应用中,由于浏览器的同源策略限制,JavaScript通常不能直接访问不同源的资源,这就是所谓的“跨域”问题。本实例将探讨如何通过JSONP...
Log4Cpp是一个流行的C++日志库,它模仿了Java的Log4j框架,提供了灵活的日志输出功能。本篇文章将深入探讨如何利用Log4Cpp有效地将日志输出到文件,实现最佳实践。 首先,理解Log4Cpp的基本结构至关重要。Log4Cpp...
- **log4j.properties或log4j.xml**:Log4j的配置文件,定义日志级别(TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF)、输出目的地(控制台、文件、网络等)以及布局模式。 **5. 日志级别** - **TRACE**:最详细...
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd'.log' # 每天生成一个新的日志文件 # 设置日志格式 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d...
- `LogConfig`类(可选):用于设置日志配置,如日志级别、文件输出路径等。 5. **最佳实践** - **日志分离**:将日志相关的代码封装在独立的模块,遵循单一职责原则。 - **日志过滤**:避免在生产环境中输出...