- 论坛徽章:
- 0
|
接到一个新的任务,其实是被客户逼的呵呵,没有办法,吃人家的饭就要帮人家干活,可是捏,这个确实不是我的强项,搞了半天也没有搞定想要搞的东西,目前还处于猛搞状态中,估计过几年回头看看现在的问题要骂自己笨蛋了,没有办法本来就是很笨吗。闲话少絮
首先贴出我想分析的文件大概内容
"TScom_DBI.c"(205): iSybaseDBProc=1
"TScom_DBI.c"(331): Sybase server: SXJHWG DBProc: 1
"TScom_DBI.c"(335): stSQLDBList.iDatabaseSum=7
"TS_DB_Data.c"(58): SELECT * FROM staticdb..SYSCONF ORDER BY CONF_TYPE,CONF_NAME
"TS_DB_Data.c"(215): TSDATA_DBSelect OK!
"TaskExecutive.cpp"(210): 数据库初始化
"TaskExecutive.cpp"(217): 共享内存初始化
"CommandSender.cpp"(8): 机型为:770
"TSFQ_Transport.cpp"(1079): 进入[ TSFQ_StartOpt ]
"TSFQ_Transport.cpp"(1087): 与管理进程建立连接
"TSFQ_Transport.cpp"(1094): 登录前,sSVHost=133.128.4.7,sLstnService1=8011
"TCComSock.c"(167): sd=14
"TCcomProfile.c"(358): not find entry IP_ADDR.
"TCComSock.c"(101): server.ini文件中没有配置本机的ip地址,用INADDR_ANY宏
"TSFQ_Transport.cpp"(1107): 向管理进程登录
想用java写一个程序将该文件中的日期字符串取出来与当前的系统时间进行比对。
目前遇到两个难点。
一,该日志的文件名的命名规律为进程名+进程ID号,比如 LogTSFC_OPT.020306 ,进程名是固定的,但是进程ID号如果该进程被重启了,将会变化,该怎么确定要分析的文件名呢?用通配符?
二,如何将该日志的当前取到以后的最后一行的日期读取出来,与当前系统时间进行比对,该日志文件是不断更新的。
目前仅做到了一个类将固定名称的日志文件读出来,从最后一行开始,逐行打印到屏幕上,却不知道怎么读取想要的结果。
而且不知道如何处理日志文件中的文件名不断变化的问题。目前的代码如下
package ReadLog;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class FromEndRF {
public static void main(String args[]){
RandomAccessFile rf=null;
try {
//只能固定文件名,不能写成LogEWS_SCHD_03.*该怎么解决这个问题呢?
rf = new RandomAccessFile("/telstar/log/debuglog/LogEWS_SCHD_03.013964","r");
long len=rf.length();
long start=rf.getFilePointer();
long nextend=start+len-1;
String line;
rf.seek(nextend);
int c=-1;
while (nextend>start){
c=rf.read();
if (c == '\n' || c == '\r')
{
line = rf.readLine();
System.out.println(line);
nextend--;
}
nextend--;
rf.seek(nextend);
if (nextend == 0) {// 当文件指针退至文件开始处,输出第一行
System.out.println(rf.readLine());
}
}
}catch(FileNotFoundException e){
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
finally {
try
{
if (rf !=null)
rf.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
我的思路是如果能取到最后一行,然后用substr进行字符串截取到日志中的时间,与当前系统时间进行比对,如果差值10分钟以上,判定该程序有问题。然后将判断结果入库,当然我觉得用我们公司的srdl或者perl解决此类问题比较简单,但是就想用java实现哈哈,锻炼一下,有了第一次。。。。就。。。。。不言而喻。。。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/54454/showart_1136890.html |
|