使用多行条目解析log4j日志文件(即Java堆栈异常)

时间:2017-01-10 11:47:27

标签: regex log4j multiline

如何使用正则表达式解析每个事件可包含多行的log4j 1日志文件? (即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

此正则表达式无法捕获最后一个事件

  

标志:/ gsmx

^(?<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可以编码,但我还没有找到替换新版本的方法。

1 个答案:

答案 0 :(得分: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 \-)
  )
)
相关问题