2
我正在嘗試爲log4j編寫一個日誌解析器。我有一個適用於正常消息的正則表達式,但是當它到達引發異常的消息時,它只會顯示第一行的內容,並且不會與堆棧跟蹤相匹配。正則表達式,可以處理Java異常
我該如何編寫一個可以處理跨越多行的Java異常的正則表達式?
這是當前正則表達式,我在Java中使用:
^(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.+)$
這是一個正常的日誌信息:
2012-01-25 20:10:03,480 INFO org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler: nodeUpdate: example.com:1 clusterResources: memory: 1
下面是一個例子異常日誌消息:
2012-01-25 00:03:59,565 ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception in doCheckpoint
java.io.IOException: Inconsistent checkpoint fields.
LV = -1 namespaceID = 1 cTime = 0 ; clusterId = CID-1 ; blockpoolId = BP-
Expecting respectively: -1; 1; 0; CID-1; BP-1
at org.apache.hadoop.hdfs.server.namenode.CheckpointSignature.validateStorageInfo(CheckpointSignature.java:111)
at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.doCheckpoint(SecondaryNameNode.java:510)
at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.doWork(SecondaryNameNode.java:381)
at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode$2.run(SecondaryNameNode.java:344)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:337)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1149)
at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.run(SecondaryNameNode.java:341)
at java.lang.Thread.run(Thread.java:619)
你能舉一個你想匹配的Java異常的例子嗎?所以我們正規的民間人誰也不是java/log4j民間可以幫你嗎? :)我唯一可以做的建議是查看'DOTALL'正則表達式標誌(通常是''),它使'.'匹配所有字符,包括'\ n'和'MULTILINE'正則表達式標誌(通常是'm' ),它讓'^'和'$'匹配行的開始/結束以及字符串的開始/結束。 –