2012-02-16 4 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', которые описывают, сколько строк после/перед совпадением должно отображаться. –

+0

какая доза выглядит так? – kev

ответ

5

Использование awk:

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

должен сделать трюк. Вкратце, найдите шаблон \tat (вкладка, в, пустое), которое почти всегда используется в трассировке стека.

Если у вас есть много исключений, вы можете использовать карты (ассоциативные массивы в лингвистике AWK), чтобы сохранить часть сообщения об исключении, а затем сделать статистику (например, какое исключение происходит больше всего).

+1

Спасибо большое! но awk является новым для меня, и да, у меня есть много исключений, можете ли вы показать пример с картами? Благодаря! –

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**
Смежные вопросы