捕获正则表达式中的日志字符串

时间:2014-06-19 15:12:22

标签: javascript regex parsing logging

所以我有这个日志字符串,我需要捕获时间,类,状态和日志消息。

Jun 18, 2014 5:50:26 PM org.apache.catalina.core.ApplicationContext log
INFO: Closing Spring root WebApplicationContext
Jun 18, 2014 5:55:44 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Jun 18, 2014 5:55:47 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext

这应该相对简单,我一直在使用正则表达式,但我知道它们的好主意。但是,任何人都可以帮助我吗?

我已经走到了这一步,但出于某种原因,我无法将这两条线组合成一个分组。 http://regex101.com/r/kI9pX7

更新:http://regex101.com/r/sN9qC8 但是,我不想对冒号进行分组,只是显示日志消息。

2 个答案:

答案 0 :(得分:0)

我不确定你是否能够匹配这样的线路。相反,首先将日志条目折叠到一行(在INFO之前搜索\ n字符并用空字符串替换它),然后执行你得到的正则表达式。我认为这会奏效。

答案 1 :(得分:0)

以下是针对个别细分的分组。使用上一个段匹配下一个段。

例如,为了找出类名,我使用了时间正则表达式模式,并找到了我使用日志级别模式的日志消息。

  1. 日期:

    ([A-Z][a-z]{2}\s\d{1,})
    
  2. 时间:

    (\d{4}\s\d{1,}:\d{1,}:\d{1,}\s[AP]M)
    
  3. 班级名称:

    \d{4}\s\d{1,}:\d{1,}:\d{1,}\s[AP]M\s([^\s].*?)\s
    
  4. 日志级别:

    (^[^:][A-Z]+:)
    
  5. 日志消息:

    ^[^:][A-Z]+:\s(.*)$