免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5350 | 回复: 16

[待解决]日志截取代码优化 [复制链接]

论坛徽章:
0
发表于 2009-07-10 12:20 |显示全部楼层
想要的效果是: 截取日志段,并取前面20行,再加后面20行,代码如下,效率超低!请达人帮忙修改一下:

#!/bin/bash
start=20
end=20
logfile=temp.txt
rs=rs.`date +%Y%m%d_%H%M%S`.txt

# script start
unset a
unset b
unset c
unset var1
unset var2

a=`cat -n $logfile |awk '{if($0 ~ /Exception/){print $1}}'`
c=`awk 'END{print NR}' $logfile`

for i in $a;do
  if(($i<=$start));then
        var1=1      
   else
        var1=$(($i-$start))
   fi
  while [ $i ];do
    i=$(($i+1))
    b=`awk '{if($0 ~/^[0-9A-Za-z]/){if(NR=='$i')print NR}}' $logfile`

    if [ -z $b ] ; then
      continue
    else
        var2=$(($b+$end))
            if(($var2 > $c));then
                var2=$c
            fi
      break
    fi     
  done
  sed -n "$var1,${var2}p" $logfile 1>>$rs
  echo ..................................... 1>>$rs
done



日志文件片段如下,红色为我想匹配的代码段,再附加上前20行后20行,以Exception作为关键字:

INFO: Jk running ID=1 time=0/18  config=null
Jul 6, 2009 5:06:05 PM org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
Jul 6, 2009 5:06:05 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3246 ms
17:07:05,137 DEBUG ManagerBase:677 - Start expire sessions StandardManager at 1246871225137 sessioncount 0
17:07:05,138 DEBUG ManagerBase:685 - End expire sessions StandardManager processingTime 1 expired sessions: 0
17:07:56,804 DEBUG GuiceRpcServlet:49 - begin processCall!
17:07:56,813 ERROR [guiceService]:260 - Servlet.service() for servlet guiceService threw exception
com.google.gwt.user.client.rpc.InvocationException: please login!
        at jsw.crm.server.util.GuiceRpcServlet.doUnexpectedFailure(GuiceRpcServlet.java:104)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:115)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:18
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:54
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:10
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:52
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
        at java.lang.Thread.run(Thread.java:619)

Caused by: jsw.crm.client.NotLoginException: user not login!
        at jsw.crm.server.util.GuiceRpcServlet.getLoginUser(GuiceRpcServlet.java:32)
        at jsw.crm.server.util.GuiceRpcServlet.processCall(GuiceRpcServlet.java:50)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:102)
        ... 17 more
17:08:05,142 DEBUG ManagerBase:677 - Start expire sessions StandardManager at 1246871285142 sessioncount 1
17:08:05,142 DEBUG ManagerBase:685 - End expire sessions StandardManager processingTime 0 expired sessions: 0
17:08:05,310 DEBUG GuiceRpcServlet:49 - begin processCall!
17:08:05,311 ERROR GuiceRpcServlet:102 - rpc service error!

[ 本帖最后由 hidinga 于 2009-7-10 13:30 编辑 ]

论坛徽章:
0
发表于 2009-07-10 12:26 |显示全部楼层
你这里贴的之有想要的结果,
那这段结果和原日志有什么样的关系呢 ?红色部分的特征是什么?

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
发表于 2009-07-10 13:05 |显示全部楼层
楼主想表达啥意思,看得晕头转向

http://bbs2.chinaunix.net/thread-1502745-1-1.html 这里不是有人给出答案了吗?

如果不是这样的要求的话那到底是怎样的?

跑了楼主的脚本,结果是匹配行的前面20行+匹配行本身+匹配行后面21行,是这个意思吗?

[ 本帖最后由 Minsic 于 2009-7-10 13:24 编辑 ]

论坛徽章:
0
发表于 2009-07-10 13:28 |显示全部楼层

回复 #3 Minsic 的帖子

感谢大家,我想表达的不是那个意思,

我想要的是:

匹配行的前面20行+匹配行本身+首字缩进的段(红色部份)+匹配行后的首字不缩进行开始后面20行

[ 本帖最后由 hidinga 于 2009-7-10 13:31 编辑 ]

论坛徽章:
0
发表于 2009-07-10 13:31 |显示全部楼层
什么叫匹配行?匹配到"Exception"的行后面的以空格开头的连续行?

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
发表于 2009-07-10 13:44 |显示全部楼层

回复 #4 hidinga 的帖子

“匹配行后的首字不缩进行开始后面20行”

这个是什么?是说包含Exception关键字后面的行有两种情况:一种是首字缩进?一种是首字顶格?如果是前者就输出包含Exception关键字那行后面连续的首字缩进的行,如果首字顶格就输出包含Exception关键字下面的20行?

论坛徽章:
0
发表于 2009-07-10 15:53 |显示全部楼层
原帖由 Minsic 于 2009-7-10 13:44 发表
“匹配行后的首字不缩进行开始后面20行”

这个是什么?是说包含Exception关键字后面的行有两种情况:一种是首字缩进?一种是首字顶格?如果是前者就输出包含Exception关键字那行后面连续的首字缩进的行,如果 ...




匹配行后的从首字不缩进行开始后面20行”

就是说从Exception关键字之后的,缩进的要全部包含在范围内,首次出现不缩进的行开始再往下再包含20行,Exception关键字之前的20行也要包含在里面


我要的整个范围是:

20行
Exception所在的行
    缩进的行
    缩进的行
20行

[ 本帖最后由 hidinga 于 2009-7-10 15:56 编辑 ]

论坛徽章:
0
发表于 2009-07-10 16:19 |显示全部楼层

回复 #7 hidinga 的帖子

你举的例子里:
"com.google.gwt.user.client.rpc.InvocationException"的缩进行结束后马上又是一个包含"Exception"的"Caused by: jsw.crm.client.NotLoginException",这样的要怎样?

论坛徽章:
0
发表于 2009-07-10 16:26 |显示全部楼层
原帖由 kwokcn 于 2009-7-10 16:19 发表
你举的例子里:
"com.google.gwt.user.client.rpc.InvocationException"的缩进行结束后马上又是一个包含"Exception"的"Caused by: jsw.crm.client.NotLoginException",这样的要怎样?




从这行开始,把后面20行包含进来就可以了,当下一个关键词的时候又包含一次! 我上面的代码是这么写的,因为这个地方不是很好处理!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
发表于 2009-07-10 17:08 |显示全部楼层
未作详细的测试:

  1. awk '{a[NR]=$0}END{for(i=1;i<=NR;i++){if(a[i]~/Exception/){s=(i-20<0?1:i-20);e=i+1;while(a[e]~/^[ ]+/)e++;e=(e+19>NR?NR:e+19);for(j=s;j<=e;j++)print a[j]}}}' urfile
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP