Regex 如何解析apachecatalina.log

Regex 如何解析apachecatalina.log,regex,apache,tomcat,Regex,Apache,Tomcat,我正试图找到一种解析Catalina.log的方法,我真的很挣扎 这是一段代码: May 12, 2017 2:14:38 PM org.apache.coyote.AbstractProtocol init SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-apr-10.1.31.104-443"] java.lang.Exception: Connector attribute

我正试图找到一种解析Catalina.log的方法,我真的很挣扎

这是一段代码:

    May 12, 2017 2:14:38 PM org.apache.coyote.AbstractProtocol init
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-apr-10.1.31.104-443"]
java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR
    at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:490)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:649)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:821)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:638)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:663)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)
我想得到

日期=2017年5月12日下午2:14:38

=org.apache.coyote.AbstractProtocol init

错误级别=严重

错误消息=未能初始化与ProtocolHandler关联的端点[“http-apr-10.1.321.224-443”]

错误消息正文=java.lang.Exception:将SSL与APR一起使用时,必须定义连接器属性SSLCertificateFile 在org.apache.tomcat.util.net.aprenpoint.bind(aprenpoint.java:490)上

我甚至不知道从哪里开始:)
欢迎提出任何想法

我为您准备了以下正则表达式:

((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{1,2},\s+\d{4}\s+\d{1,2}:\d{1,2}:\d{1,2}\s(AM|PM))\s(.+)(\r)?\n(FATAL|SEVERE|ERROR|WARN(ING)?|INFO|CONFIG|INFO|DEBUG):\s(.+)(\r)?\n(.+)(\r)?\n(?=\s+at.+java:\d+\))
您可以使用以下反向引用来捕获您的组

DATE -> $1
CLASS ->  $4
ERROR_LEVEL ->  $6
ERROR_MSG ->  $8
ERROR_BODY ->  $10
正则表达式将仅获取满足以下条件的字符串:

  • 以帖子中指定格式的日期开始
  • 日期之后,第一行由类名组成
  • 第二行由错误级别和错误消息组成
  • 第三行是您的错误消息正文
  • 后跟由n行组成的java strack跟踪,以\s开头,以java:\d+结尾
正则表达式的工作方式如下:

((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{1,2},\s+\d{4}\s+\d{1,2}:\d{1,2}:\d{1,2}\s(AM|PM))
此部分将以您的帖子格式获取日期:

3个字符的月份后跟空格,然后是1或2位数,','然后是4位数的年份 然后是空格,然后是时间(字符列,后面是空格,然后是AM或PM

\s(.+)(\r)?\n
正则表达式的这一部分将允许您获取与类相对应的第一行的其余部分

(FATAL|SEVERE|ERROR|WARN(ING)?|INFO|CONFIG|INFO|DEBUG):\s(.+)(\r)?\n(.+)(\r)?\n
此部分将允许您获得错误级别(在此详尽列表中),后面是列以及与您的错误消息/正文相对应的以下两行

(?=\s+at.+java:\d+\))
最后一部分是一个条件,强制执行错误后面跟着java堆栈跟踪

您可能需要稍微调整正则表达式的某些部分(如错误正文的行数、错误消息)或堆栈跟踪条件,但我认为这是您的案例的一个很好的起点

干杯