Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ANTLR解析日志文件_Java_Parsing_Logging_Antlr_Antlr3 - Fatal编程技术网

Java 使用ANTLR解析日志文件

Java 使用ANTLR解析日志文件,java,parsing,logging,antlr,antlr3,Java,Parsing,Logging,Antlr,Antlr3,我需要用ANTLR解析一个Weblogic日志文件。以下是一个例子: Tue Aug 28 09:39:09 MSD 2012 [test] [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] Alert - There is no user password credential mapper provider configured in your security realm. Or

我需要用ANTLR解析一个Weblogic日志文件。以下是一个例子:

Tue Aug 28 09:39:09 MSD 2012 [test] [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] Alert - There is no user password credential mapper provider configured in your security realm. Oracle Service Bus service account management will be disabled. Configure a user password credential mapper provider if you need OSB service account support.

Sun Sep 02 23:13:00 MSD 2012 [test] [[ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)'] Warning - Timer (Checkpoint) has been triggered with a tick (205 873) that is less than or equal to the last tick that was received (205 873). This could happen in a cluster due to clock synchronization with the timer authority. The current trigger will be ignored, and operation will be skipped.
Mon Sep 03 10:35:54 MSD 2012 [test] [[ACTIVE] ExecuteThread: '19' for queue: 'weblogic.kernel.Default (self-tuning)'] Info - 
 [OSB Tracing] Inbound request was received. 

 Service Ref = Some/URL
 URI = Another/URL
 Message ID = u-u-i-d
 Request metadata =
    <xml-fragment>
      <tran:headers xsi:type="http:HttpRequestHeaders" xmlns:http="http://www.bea.com/wli/sb/transports/http" xmlns:tran="http://www.bea.com/wli/sb/transports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <http:Accept-Encoding>gzip, deflate,gzip, deflate</http:Accept-Encoding>
        <http:Connection>Keep-Alive</http:Connection>
        <http:Content-Length>666</http:Content-Length>
        <http:Content-Type>text/xml; charset=utf-8</http:Content-Type>
        <http:Host>some.host.name</http:Host>
        <http:SOAPAction>""</http:SOAPAction>
      </tran:headers>
      <tran:encoding xmlns:tran="http://www.bea.com/wli/sb/transports">utf-8</tran:encoding>
      <http:client-host xmlns:http="http://www.bea.com/wli/sb/transports/http">1.2.3.4</http:client-host>
      <http:client-address xmlns:http="http://www.bea.com/wli/sb/transports/http">1.2.3.4</http:client-address>
      <http:http-method xmlns:http="http://www.bea.com/wli/sb/transports/http">POST</http:http-method>
    </xml-fragment>
 Payload =  
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><XMLHere/></s:Envelope>

这些错误似乎是随机发生的,并且随机出现在文件重命名中。另外,ANTLR从我的解析器文件生成另一个lexer,这也是随机发生的。我正在Windows 7 x64上使用上一个可用的ANTLR3和ANTLRWorks。

我不完全确定我在跟踪什么是有效的服务请求,什么是无效的服务请求,但我还是会继续努力

您的解析器正在查找

LOGDATE METAINFO .* serviceRef .* ENVELOPE_TAG
在开始解析之前,lexer正在寻找LOGDATE+METAINFO+somestuff+serviceRef

<> > Listor不知道你希望它丢弃前两个没有Service Errf的登录日期,而只考虑具有Service Erf的第三个条目。因此,它将解析第一行作为完整条目的开始

在不给你答案,也不剥夺你对antlr深刻理解所带来的快乐的情况下,我建议你让你的lexer更多地了解如何建立一个合适的词条。lexer还应该理解错误条目是如何生成的


换句话说,你将如何重写lexer,使其处理一些词素,并说前两行只是日期,第三行是真正的交易?

我不完全确定我跟踪的是有效的还是无效的服务请求,但我还是会继续努力

您的解析器正在查找

LOGDATE METAINFO .* serviceRef .* ENVELOPE_TAG
在开始解析之前,lexer正在寻找LOGDATE+METAINFO+somestuff+serviceRef

<> > Listor不知道你希望它丢弃前两个没有Service Errf的登录日期,而只考虑具有Service Erf的第三个条目。因此,它将解析第一行作为完整条目的开始

在不给你答案,也不剥夺你对antlr深刻理解所带来的快乐的情况下,我建议你让你的lexer更多地了解如何建立一个合适的词条。lexer还应该理解错误条目是如何生成的

换句话说,你将如何重写lexer,使它处理一些词素,并说前两行只是一个日期,第三行是真正的交易

这些错误似乎是随机发生的,并且随机出现在文件重命名中

不,它们不是随机发生的。错误源于规则:

fragment
SPECIAL : ( ~'\n' | '\'' | '.' | '(' | ')' | '-');
集合~'\n'已与'\\'.\\\\\\'-'匹配。你可能是说:

fragment
SPECIAL : ~('\n' | '\'' | '.' | '(' | ')' | '-');
另外,ANTLR从我的解析器文件生成另一个lexer,这也是随机发生的。我正在Windows 7 x64上使用最后可用的ANTLR3和ANTLRWorks

只有在不指定语法类型的情况下才会发生这种情况。例如:语法T所谓的组合语法同时生成词法分析器和语法分析器,其中语法分析器T和词法分析器T只分别生成语法分析器和词法分析器。一开始我看到你发了一个综合语法。额外的lexer类可能是您使用组合语法时的遗留

另外,确保不要在解析器语法中使用任何文字标记!从requestLogEntry规则中删除“”

这些错误似乎是随机发生的,并且随机出现在文件重命名中

不,它们不是随机发生的。错误源于规则:

fragment
SPECIAL : ( ~'\n' | '\'' | '.' | '(' | ')' | '-');
集合~'\n'已与'\\'.\\\\\\'-'匹配。你可能是说:

fragment
SPECIAL : ~('\n' | '\'' | '.' | '(' | ')' | '-');
另外,ANTLR从我的解析器文件生成另一个lexer,这也是随机发生的。我正在Windows 7 x64上使用最后可用的ANTLR3和ANTLRWorks

只有在不指定语法类型的情况下才会发生这种情况。例如:语法T所谓的组合语法同时生成词法分析器和语法分析器,其中语法分析器T和词法分析器T只分别生成语法分析器和词法分析器。一开始我看到你发了一个综合语法。额外的lexer类可能是您使用组合语法时的遗留

另外,确保不要在解析器语法中使用任何文字标记!从requestLogEntry规则中删除“”。内核模式

我不确定您选择的解析日志文件的方式是否最合适

在我看来,Antlr是用来描述上下文无关语法的。 在你的例子中,我们有一个最简单的规则语法

根据我的经验,我敢说,对于逐行模式解析日志文件,读卡器是一种更简单、更优化的方法。这样的算法如下所示:

读一行。去p。2.1. 2.1如果行以与解析正则表达式匹配的表达式开始,则周一9月3日10:35:54 MSD 2012-解析它并保存结果以供进一步解析。去p。1. 2.2如果该行与上述regexp不匹配,则转到p。3. 读取行,直到一行与第2.1页中的reg.exp匹配。去p。4. 尝试使用简单的字符串函数从读取块中剪切XML。去p。5. 包含XML?=>解析XML并使用以前保存的解析结果作为日志日期。 然后转到第1页。 k 欧内斯模式

我不确定您选择的解析日志文件的方式是否最合适

在我看来,Antlr是用来描述上下文无关语法的。 在你的例子中,我们有一个最简单的规则语法

根据我的经验,我敢说,对于逐行模式解析日志文件,读卡器是一种更简单、更优化的方法。这样的算法如下所示:

读一行。去p。2.1. 2.1如果行以与解析正则表达式匹配的表达式开始,则周一9月3日10:35:54 MSD 2012-解析它并保存结果以供进一步解析。去p。1. 2.2如果该行与上述regexp不匹配,则转到p。3. 读取行,直到一行与第2.1页中的reg.exp匹配。去p。4. 尝试使用简单的字符串函数从读取块中剪切XML。去p。5. 包含XML?=>解析XML并使用以前保存的解析结果作为日志日期。 然后转到第1页。
您正在查找日期加上服务请求,并希望放弃没有服务请求和后续的裸日期,这是否正确?您正在查找日期加上服务请求,并希望放弃没有服务请求和后续的裸日期,这是否正确?在lexer语法中使用filter=true,您不需要描述正在解析的整个语言/输入。简而言之:ANTLR可以用于这项任务——当然,也可以按照您的建议使用逐行解决方案,但我认为,ANTLR在这里也是合适的。巴特,我的意思是,ANTLR是解析更复杂文本的强大工具。在这个问题中,根据标准的日志文件结构,编写自己的简单逐行解决方案更简单、更轻量级。我知道,我理解这一点。然而,我要说的是,尽管ANTLR可以用于更复杂的任务,但它也可以在这种情况下使用。简而言之:ANTLR可以用于这项任务——当然,也可以按照您的建议使用逐行解决方案,但我认为,ANTLR在这里也是合适的。巴特,我的意思是,ANTLR是解析更复杂文本的强大工具。在这个问题中,根据标准的日志文件结构,编写自己的简单逐行解决方案更简单、更轻量级。我知道,我理解这一点。然而,我要说的是,尽管ANTLR可以用于更复杂的任务,但它也可以在这种情况下使用。谢谢我的细节在这里:用你的解释来解决我的问题。谢谢我的详细情况如下:
LOGDATE METAINFO .* serviceRef .* ENVELOPE_TAG
fragment
SPECIAL : ( ~'\n' | '\'' | '.' | '(' | ')' | '-');
fragment
SPECIAL : ~('\n' | '\'' | '.' | '(' | ')' | '-');