我有一個需求,我需要解析輸入文件並只讀取文件的某些部分。我有一個日誌文件,它有不同的級別,如信息警告和錯誤。現在我只需要讀取包含完整錯誤堆棧跟蹤的部分。我怎樣才能實現這一點使用Java。Java - 如何只讀取輸入流的某些部分
例:
INFO | 2011-04-13 17:59:22,810 | Calling Feedback from 127.0.0.1
INFO | 2011-04-13 17:59:24,920 | Successfully called Feedback from 127.0.0.1
INFO | 2011-04-13 17:59:31,561 | FeedBackList
ERROR | 2011-04-13 19:00:41,640 |
java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
at java.util.concurrent.FutureTask.get(FutureTask.java:91)
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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.orm.hibernate3.HibernateInterceptor.invoke(HibernateInterceptor.java:111)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy309.getConsumerProfileData(Unknown Source)
at com.scea.usps.model.service.impl.AccountSettingsServiceImpl.getUserProfile(Unknown Source)
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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.orm.hibernate3.HibernateInterceptor.invoke(HibernateInterceptor.java:111)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy284.getUserProfile(Unknown Source)
at com.scea.usps.model.common.PsninfoUtility.getTop3Generes(Unknown Source)
at com.scea.usps.model.common.PsninfoUtility.updatePsnInfoDetail(Unknown Source)
at com.scea.platform.framework.api.PsnInfoThread.run(Unknown Source)
at java.lang.Thread.run(Thread.java:619)
INFO | 2011-04-13 17:59:22,810 | Calling Feedback from 127.0.0.1
INFO | 2011-04-13 17:59:24,920 | Successfully called Feedback from 127.0.0.1
INFO | 2011-04-13 17:59:31,561 | FeedBackList
在上述日誌I需要提取(讀出)從ERROR開始直到堆棧跟蹤結束的所有行。請在此分享您的想法。謝謝。
當你說「只讀文件的某些部分」你的意思是你需要分析那些文件?我問的是你只是在尋找一種算法來解析適當的數據,或者更復雜的東西? 此外,將所有「錯誤」有堆棧跟蹤?是行ERROR/INFO和換行符的唯一開始條目? 如果這只是一個基本的「我該怎麼......」的問題,那麼Brian的答案是最有意義的。 – Mike 2011-04-13 18:31:36
爲什麼日誌文件解析器必須是Java? – MarkOfHall 2011-04-13 18:33:04
不知道鏈鋸http://logging.apache.org/chainsaw/index.html是否可以處理這種開箱即用,但在構建自己的應用程序之前,我可以嘗試一下。 – Kennet 2011-04-13 18:38:35