2017-01-10 30 views
0

如何使用正則表達式分析每個事件可包含多行的log4j 1日誌文件? (即Java異常堆棧跟蹤)使用多行條目解析log4j日誌文件(即Java堆棧異常)

樣品log4j日誌輸出

圖案佈局%r [%t] %-5p %c{2} %x - %m%n

176 [main] INFO examples.Sort - Populating an array of 2 elements in reverse order. 
225 [main] INFO examples.SortAlgo - Entered the sort method. 
262 [main] DEBUG SortAlgo.OUTER i=1 - Outer loop. 
276 [main] DEBUG SortAlgo.SWAP i=1 j=0 - Swapping intArray[0] = 1 and intArray[1] = 0 
290 [main] DEBUG SortAlgo.OUTER i=0 - Outer loop. 
304 [main] INFO SortAlgo.DUMP - Dump of interger array: 
317 [main] INFO SortAlgo.DUMP - Element [0] = 0 
331 [main] INFO SortAlgo.DUMP - Element [1] = 1 
343 [main] INFO examples.Sort - The next log statement should be an error message. 
346 [main] ERROR SortAlgo.DUMP - Tried to dump an uninitialized array. 
     at org.log4j.examples.SortAlgo.dump(SortAlgo.java:58) 
     at org.log4j.examples.Sort.main(Sort.java:64) 
467 [main] INFO examples.Sort - Exiting main method. <-- regex fails to capture last event 

此正則表達式未能捕捉的最後一個事件

標誌:/手機交易網gsmExchange.com

^(?<elapsed>\d+?) \s 
\[(?<thread>.+?)\] \s 
(?<priority>TRACE|DEBUG|INFO|WARN|ERROR|FATAL) \s 
(?<category>.+?) \s \- \s 
(?<msg> 
    (.+?$[\n])+? 
    (
     $(?![\r\n])(?#EOF) 
     | 
     (?=\d+? \s \[ .+? \] \s (TRACE|DEBUG|INFO|WARN|ERROR|FATAL) \s (.+?) \s \-) 
) 
) 

我知道的log4j 2可以編碼,但我還沒有找到一種方法來交換到新的版本呢。

回答

0

最後釘的正則表達式:

(?smx) 
^(?<elapsed>\d+?) \s 
\[(?<thread>.+?)\] \s 
(?<priority>TRACE|DEBUG|INFO|WARN|ERROR|FATAL) \s 
(?<category>.+?) \s \- \s 
(?<msg> 
    (.+?) 
    (
    $(?![\r\n]) (?#EOF) 
    | 
    (?=^\d+? \s \[ .+? \] \s (TRACE|DEBUG|INFO|WARN|ERROR|FATAL) \s (.+?) \s \-) 
) 
)