免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3872 | 回复: 15
打印 上一主题 下一主题

我要写个日志分析器。请各位帮忙。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-19 09:44 |只看该作者 |倒序浏览
我之前发过帖子。。如石沉大海~没人里我
请各位帮帮我好吗。谢谢了:(我好着急。
我简单说一下大概情况和需求:   现在有个系统日志,日志(db.log)记录了应用执行一条命令后的开始时间和结束时间和别的一些东西。里面有若干这样的信息。我要用JAVA做的就是,读取这个日志(db.log),然后输入一个时间,比如5秒。然后JAVA就会运行,在屏幕输出开始时间和结束时间在5秒内的日志中的信息。谁帮帮我。555

论坛徽章:
0
2 [报告]
发表于 2005-12-19 09:47 |只看该作者
这个 db.log 已存在还是?存在的话把格式帖出来

论坛徽章:
0
3 [报告]
发表于 2005-12-19 09:58 |只看该作者
日志是已经存在的以下是日志:其中红色的是开始时间和结束时间。要做的就是输入一个时间条件,以秒为单位。输入完执行判断,输出符合输入时间的在屏幕显示。谢谢

2005-12-01 13:25:46,047 INFO  [WebContainer : 1] db.log     (DBOperate.java:5     -  select * from sys_cfg_agcmanager where  opterid='sys' and agcpswd='sys'
2005-12-01 13:25:48

2005-12-01 13:26:17,578 INFO  [WebContainer : 2] db.log     (DBOperate.java:5     - select ip,port,time_out from  app_rpt_ywdmb a,app_cfg_front b  where a.app_cfg_front_name=b.name and a.id='1121'
2005-12-01 13:28:17
2005-12-01 13:26:17,656 INFO  [WebContainer : 2] db.log     (DBOperate.java:5     - select * from app_dic_branchinfo where corpcode like '1101%' and (shortcut<>100 or shortcut is null)  order by id
2005-12-02 13:26:17
2005-12-01 13:26:17 bb
2005-12-01 13:28:32
2005-12-01 13:38:12,125 ERROR [WebContainer : 10] db.log     (DBOperate.java:61)     - execute procedure  sp_yw_edt_custinfo('11010800','','fdsdfdsa','','','','','','','','','32432432423','','','','','','','0','','','','2005-12-01 13:38:11','sys','',''):Variable (incolor) has undefined value.
2005-12-01 18:38:12


2005-12-01 13:38:12,141 ERROR [WebContainer : 10] db.log     (DBOperate.java:62)     - java.sql.SQLException: Variable (incolor) has undefined value.
        at com.informix.jdbc.IfxSqli.addException(IfxSqli.java:3082)
        at com.informix.jdbc.IfxSqli.receiveError(IfxSqli.java:3396)
        at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java(Compiled Code))
        at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java(Compiled Code))
        at com.informix.jdbc.IfxSqli.sendStatementQuery(IfxSqli.java:1444)
        at com.informix.jdbc.IfxSqli.executeStatementQuery(IfxSqli.java:1383)
        at com.informix.jdbc.IfxSqli.executeStatementQuery(IfxSqli.java:1313)
        at com.informix.jdbc.IfxResultSet.executeQuery(IfxResultSet.java:216)
        at com.informix.jdbc.IfxStatement.executeQueryImpl(IfxStatement.java:839)
        at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:139)
        at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.pmiExecuteQuery(WSJdbcStatement.java:116
        at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.executeQuery(WSJdbcStatement.java:626)
        at com.hanker.db.DBOperate.query(DBOperate.java:51)
        at own.DBService.getSelectSP(DBService.java:1352)
        at own.BasalService.setUserVisit(BasalService.java:513)
        at com.ibm._jsp._c_5F_casesubmit._jspService(_c_5F_casesubmit.java:64
        at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:8
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1212)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1173)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:92)
        at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:123)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:142)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:77)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:626)
        at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:117)
        at com.ibm.ws.jsp.webcontainerext.JSPExtensionServletWrapper.handleRequest(JSPExtensionServletWrapper.java:171)
        at com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor.handleRequest(JSPExtensionProcessor.java:230)
        at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:2841)
        at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:220)
        at com.ibm.ws.webcontainer.VirtualHost.handleRequest(VirtualHost.java:204)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1681)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:77)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:421)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:367)

论坛徽章:
0
4 [报告]
发表于 2005-12-19 10:02 |只看该作者
比如

2005-12-01 13:25:46

2005-12-01 13:25:48

就是 2  秒?

他们是每一行一条信息的?

论坛徽章:
0
5 [报告]
发表于 2005-12-19 10:11 |只看该作者
对。如果是 2005-12-01 13:25:40

                 2005-12-01 13:25:48
就是8秒。如果输入10的话就所列出所有开始时间和结束时间在10秒内的,也就包括上面的8秒。

[ 本帖最后由 破晓MM 于 2005-12-19 10:15 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2005-12-19 10:15 |只看该作者
下面这个是我已经写好的。可能有些低级错误,我也测试过了。可能算法或者别的什么有问题:(和我想的结果不一样。而且也没加上输入的条件。String str = JOptionPane.showInputDialog("请输入时间条件:");
        int j = Integer.parseInt(str);

有空可以给我看一下。。。帮我改正完善一下。谢谢各位大侠


import java.io.*;
import java.util.*;
import java.text.*;

public class TestTime
{
   private String cfgFile;
   private Date start = null;
   private Date end = null;
   private String handleString = null;
   private final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
   private final int LEN = DATE_FORMAT.length();
   
   public static TestTime getBundle(String cfgFile)
   {
      TestTime obj = new TestTime();
      obj.cfgFile = cfgFile.trim();
      return obj;
   }
   
   
   public Date isDateString(String input)
   {
      //boolean flag = true;
      Date t = null;
      SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT);
      try
      {
         t = formatter.parse(input);
      }
      catch(ParseException e)
      {
         //System.out.println("unparseable using " + formatter);
         t = null;
      }
      finally
      {
         return t;
      }
   }
   
   private void handleTime()
   {
      long diff = end.getTime() - start.getTime();
      long days = diff / (24*60*60*1000);
      long hours = (diff % (24*60*60*1000)) / (60*60*1000);
      long minutes = ((diff % (24*60*60*1000)) % (60*60*1000)) / (60 * 1000);
      long seconds = (((diff % (24*60*60*1000)) % (60*60*1000)) % (60 * 1000)) / 1000;
      System.out.println(days + " 天" + hours + " 时" + minutes + " 分" + seconds + " 秒--->" + handleString);
   }
   public void getCfgMsg()
   {
      BufferedReader br = null;
      int i = 0;
      try
      {
         br = new BufferedReader(new FileReader(cfgFile));
         String input = "";
         while((input=br.readLine()) != null)
         {
            String temp = "";
            if(input.length() >= LEN)
            {
               temp = input.trim().substring(0, LEN);
            }
            if(isDateString(temp) == null || input.trim().equals(""))
            {
               continue;
            }
            i++;
            if(i % 2 == 1)
            {
               start = isDateString(temp);
               handleString = input.substring(LEN).trim();
            }
            else if (i % 2 == 0)
            {
               end = isDateString(temp);
               this.handleTime();
            }
         }
         br.close();
      }
      catch(IOException e)
      {
         System.out.println("exception..." + e);
      }
      catch(Exception e)
      {
         e.printStackTrace();
      }
   }
   
   private String[] divCfgMsg(String input)
   {
      String[] result = new String[2];
      int pos = input.indexOf("=");
      result[0] = input.substring(0, pos).trim();
      result[1] = input.substring(pos+1).trim();
      return result;
   }
   
   
   
   public static void main(String[] args)
   {
      TestTime cb = TestTime.getBundle("db.log");
      cb.getCfgMsg(); // 将结果打印到屏幕
   }   
}

论坛徽章:
0
7 [报告]
发表于 2005-12-19 11:00 |只看该作者
他们是每一行一条信息的? 这很重要

论坛徽章:
0
8 [报告]
发表于 2005-12-19 11:15 |只看该作者
每一行一信息?你指的是什么?不太明白。。。

论坛徽章:
0
9 [报告]
发表于 2005-12-19 11:31 |只看该作者

代码



  1. import java.io.*;
  2. import java.sql.Timestamp;


  3. public class parseLog
  4. {
  5.         private String dbFile;
  6.         private char operator;
  7.         public parseLog(String f)
  8.         {
  9.                 this.dbFile = f;
  10.         }

  11.         public static void main(String[] args) throws Exception
  12.         {
  13.                 if (args.length<=0)
  14.                 {
  15.                         System.out.println("argument statment");
  16.                         System.out.println("e = equals");
  17.                         System.out.println("m = more than");
  18.                         System.out.println("l = less than");
  19.                         System.out.println("example: more than 4 seconds");
  20.                         System.out.println("java parseLog m4");
  21.                         System.exit(1);
  22.                 }

  23.                 parseLog pl = new parseLog("./db.log");
  24.                 pl.preParse(args[0]);
  25.         }

  26.         public void preParse(String arg) throws Exception
  27.         {
  28.                 int len,s;
  29.                 if (arg==null || (len = (arg=arg.trim()).length() ) <=0)
  30.                 {
  31.                         return;
  32.                 }

  33.                
  34.                 String test = arg.substring(0,1);
  35.                 if (test.equals("l"))
  36.                 {
  37.                         operator = '<';
  38.                         s = parseInt(arg.substring(1,len));
  39.        
  40.                 }else if (test.equals("m"))
  41.                 {
  42.                         operator = '>';
  43.                         s = parseInt(arg.substring(1,len));

  44.                 }else if (test.equals("e"))
  45.                 {
  46.                         operator = '=';
  47.                         s = parseInt(arg.substring(1,len));
  48.                 }else{
  49.                         operator = '=';
  50.                         s = parseInt(arg);
  51.                 }

  52.                 if (s==-1)
  53.                 {
  54.                         System.exit(1);
  55.                 }

  56.                 showMsg(s);
  57.         }


  58.         public long parseTime(String t1,String t2)
  59.         {
  60.                 try{
  61.                         Timestamp tt1 = Timestamp.valueOf(t1);
  62.                         Timestamp tt2 = Timestamp.valueOf(t2);

  63.                         return tt2.getTime() - tt1.getTime();

  64.                 }catch(Exception e)
  65.                 {
  66.                         System.out.println("wrong time format");
  67.                         return -1;
  68.                 }

  69.         }

  70.         public int parseInt(String str)
  71.         {
  72.                 try{
  73.                         return Integer.parseInt(str);
  74.                 }catch(Exception e)
  75.                 {
  76.                         System.out.println("wrong argument format");
  77.                         return -1;
  78.                 }
  79.        
  80.         }

  81.         public String getTime(String t)
  82.         {
  83.                 try{
  84.                         return t.substring(0,19);
  85.                 }catch(Exception e)
  86.                 {
  87.                         return null;
  88.                 }

  89.         }

  90.         public void showMsg(int s) throws Exception
  91.         {
  92.                 char flag = 0;
  93.                 String con,t1,t2;
  94.                 BufferedReader BR  = new BufferedReader(new FileReader(dbFile));
  95.                 while ((t1 = BR.readLine())!=null)
  96.                 {
  97.                         con = t1;
  98.                         t1 = getTime(t1);

  99.                         t2 = BR.readLine();
  100.                         if (t2==null)
  101.                         {
  102.                                 return;
  103.                         }else{
  104.                                 t2 = getTime(t2);
  105.                         }

  106.                         long t = parseTime(t1,t2);
  107.                         if (t!=-1)
  108.                         {
  109.                                 t = t/1000;
  110.                                 if (operator=='=' && t==s)
  111.                                 {
  112.                                         System.out.println(con);
  113.                                 }else if (operator=='>' && s<t)
  114.                                 {
  115.                                         System.out.println(con);
  116.                                 }else if (operator=='<' && s>t)
  117.                                 {
  118.                                         System.out.println(con);
  119.                                 }

  120.                         }


  121.                 }

  122.         }


  123. }


复制代码

[ 本帖最后由 wobushiwo 于 2005-12-19 11:33 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2005-12-19 12:01 |只看该作者
也有出错信息在里面?而且信息也不是说固定一行的?
那就复杂,你得先找出log文件的记录规律,不然根本不行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP