我正试图找到一种方法来解析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.AprEndpoint.bind(AprEndpoint.java:490)....
我甚至不知道从哪里开始:) 任何想法都非常欢迎
答案 0 :(得分:2)
我为你准备了以下正则表达式:
((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
正则表达式只会获取符合以下条件的字符串:
正则表达式的工作方式如下:
((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位数的年份 然后是空格,然后是时间(列char,然后是空格,然后是AM或PM
\s(.+)(\r)?\n
正则表达式的这一部分将允许您获得与类
对应的第一行的其余部分(FATAL|SEVERE|ERROR|WARN(ING)?|INFO|CONFIG|INFO|DEBUG):\s(.+)(\r)?\n(.+)(\r)?\n
这部分将允许您获得错误级别(在此详尽列表中)后跟列和以下2行对应到您的错误消息/身体
(?=\s+at.+java:\d+\))
最后一部分是强制您的错误后跟java堆栈跟踪的条件。
您可能需要调整正则表达式的某些部分(如错误正文的行数,错误消息)或堆栈跟踪条件,但我认为这是您案例的一个很好的起点。
CHEERS !!!