2012-02-16 177 views
2

我有很多例外的一個巨大的日誌文件,我需要之前和之後提取完整的堆棧跟蹤和幾行。這將是完美的,如果這個工具是bash腳本。 例如:如何從java日誌文件中提取異常?

$16.02.2012 16:04:34 *INFO * [main] InitialContextInitializer: Reference bound: rmirepository (InitialContextInitializer.java, line 203) 
16.02.2012 16:04:34 *ERROR* [main] StandaloneContainerInitializedListener: Error of StandaloneContainer initialization (StandaloneContainerInitializedListener.java, line 109) 
java.lang.RuntimeException: Cannot instantiate component key=org.exoplatform.services.jcr.ext.script.groovy.GroovyScript2RestLoader type=org.exoplatform.services.jcr.ext.script.groovy.GroovyScript2RestLoader found at file:/home/roman/reports/backup/1.14.7-5636/rdbms/single/exo-tomcat_1.14.7-5636/exo-configuration.xml 
    at org.exoplatform.container.jmx.MX4JComponentAdapter.getComponentInstance(MX4JComponentAdapter.java:134) 
    at org.exoplatform.container.management.ManageableComponentAdapter.getComponentInstance(ManageableComponentAdapter.java:68) 
    at org.exoplatform.container.ConcurrentPicoContainer.getInstance(ConcurrentPicoContainer.java:468) 
    at org.exoplatform.container.ConcurrentPicoContainer.getComponentInstancesOfType(ConcurrentPicoContainer.java:366) 
    at org.exoplatform.container.CachingContainer.getComponentInstancesOfType(CachingContainer.java:111) 
    at org.exoplatform.container.LifecycleVisitor.visitContainer(LifecycleVisitor.java:151) 
    at org.exoplatform.container.ConcurrentPicoContainer.accept(ConcurrentPicoContainer.java:615) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.picocontainer.defaults.AbstractPicoVisitor.traverse(AbstractPicoVisitor.java:32) 
    at org.exoplatform.container.LifecycleVisitor.traverse(LifecycleVisitor.java:90) 
    at org.exoplatform.container.LifecycleVisitor.start(LifecycleVisitor.java:170) 
    at org.exoplatform.container.ConcurrentPicoContainer.start(ConcurrentPicoContainer.java:554) 
    at org.exoplatform.container.ExoContainer.start(ExoContainer.java:266) 
    at org.exoplatform.container.StandaloneContainer$3.run(StandaloneContainer.java:178) 
    at org.exoplatform.container.StandaloneContainer$3.run(StandaloneContainer.java:175) 
    at org.exoplatform.commons.utils.SecurityHelper.doPrivilegedAction(SecurityHelper.java:291) 
    at org.exoplatform.container.StandaloneContainer.getInstance(StandaloneContainer.java:174) 
    at org.exoplatform.container.StandaloneContainer.getInstance(StandaloneContainer.java:129) 
    at org.exoplatform.ws.frameworks.servlet.StandaloneContainerInitializedListener.contextInitialized(StandaloneContainerInitializedListener.java:104) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4205) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675) 
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502) 
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1315) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:525) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 
Caused by: java.lang.RuntimeException: Cannot instantiate component key=org.exoplatform.services.jcr.RepositoryService type=org.exoplatform.services.jcr.impl.RepositoryServiceImpl found at file:/home/roman/reports/backup/1.14.7-5636/rdbms/single/exo-tomcat_1.14.7-5636/exo-configuration.xml 
    at org.exoplatform.container.jmx.MX4JComponentAdapter.getComponentInstance(MX4JComponentAdapter.java:134) 
    at org.exoplatform.container.management.ManageableComponentAdapter.getComponentInstance(ManageableComponentAdapter.java:68) 
    at org.exoplatform.container.ConcurrentPicoContainer.getInstance(ConcurrentPicoContainer.java:468) 
    at org.exoplatform.container.ConcurrentPicoContainer.getComponentInstanceOfType(ConcurrentPicoContainer.java:422) 
    at org.exoplatform.container.CachingContainer.getComponentInstanceOfType(CachingContainer.java:139) 
    at org.exoplatform.container.ExoContainer.createComponent(ExoContainer.java:407) 
    at org.exoplatform.container.jmx.MX4JComponentAdapter.getComponentInstance(MX4JComponentAdapter.java:96) 
    ... 45 more 
+0

您需要提供一些更多的信息,也許日誌和預期輸出。作爲一個開始看看'grep'和'-A,'-B'切換描述多少行後/應顯示在比賽前。 – 2012-02-16 12:13:50

+0

輸出量是多少? – kev 2012-02-16 14:17:33

回答

5

使用awk

BEGIN { 
    previous = ""; 
} 
/^\tat/{ 
    if(previous != "") { 
     print previous; 
    previous = ""; 
    } 
    print; 
    next; 
} 
{ previous = $0; } 

應該做的伎倆。概括地說,查找圖案\tat(選項卡,在空白),其幾乎總是在堆棧跟蹤使用。

如果你有很多例外,那麼你可以使用地圖(關聯數組在AWK的行話)保存異常消息的一部分,然後進行統計(如其中發生異常的最)。

+1

非常感謝!但awk對我來說是新的,是的,我有很多例外,你可以用地圖來展示例子嗎?謝謝! – 2012-02-17 08:07:50

0

你可以嘗試這樣的事情,

======= 
grep -B20 -A20 ^'$16.02.2012 16:04:34' <path/to/log/file> 
======= 

Where 
-B20 -- will display 20 lines before the line where the match was found. 
-A20 -- will display 20 lines after the line where the match was found. 
1

大多數Java異常塊行是先從TAB分隔符。

因此,要獲得從您可以使用grep TAB分隔符一個巨大的日誌文件中的所有異常。

使用以下命令從文件中grep的所有異常:

**$ grep -P -A 15 -B 15 "^\t" inputLogFile**