可以处理java异常的正则表达式

可以处理java异常的正则表达式,java,regex,log4j,Java,Regex,Log4j,我正在尝试为log4j编写一个日志解析器。我有一个用于普通消息的正则表达式,但是当它到达一个抛出异常的消息时,它将只显示第一行上的内容,并且与堆栈跟踪不匹配 如何编写一个正则表达式来处理跨多行的Java异常 以下是我在java中使用的当前正则表达式: ^(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.+)$ 这是一个正常的日志消息: 2012-01-25 20:10:03,480 INFO org.apache.hadoop.yarn.server.reso

我正在尝试为log4j编写一个日志解析器。我有一个用于普通消息的正则表达式,但是当它到达一个抛出异常的消息时,它将只显示第一行上的内容,并且与堆栈跟踪不匹配

如何编写一个正则表达式来处理跨多行的Java异常

以下是我在java中使用的当前正则表达式:

^(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.+)$
这是一个正常的日志消息:

2012-01-25 20:10:03,480 INFO org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler: nodeUpdate: example.com:1 clusterResources: memory: 1
以下是一个异常日志消息示例:

2012-01-25 00:03:59,565 ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception in doCheckpoint
java.io.IOException: Inconsistent checkpoint fields.
LV = -1 namespaceID = 1 cTime = 0 ; clusterId = CID-1 ; blockpoolId = BP-
Expecting respectively: -1; 1; 0; CID-1; BP-1
        at org.apache.hadoop.hdfs.server.namenode.CheckpointSignature.validateStorageInfo(CheckpointSignature.java:111)
        at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.doCheckpoint(SecondaryNameNode.java:510)
        at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.doWork(SecondaryNameNode.java:381)
        at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode$2.run(SecondaryNameNode.java:344)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:337)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1149)
        at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.run(SecondaryNameNode.java:341)
        at java.lang.Thread.run(Thread.java:619)
这应该做到:

(.*\\bERROR\\b.*)\\r?\\n(.*\\r?\\n)*(.*\\bat\\b.*)*(\\d{1,4}\\)\\r?\\n)

我假设您正在将日志文件读入
CharSequence
并将其传递给Java中的模式匹配器,而不是逐行读取文件。

您能给出一个想要匹配的Java异常的示例吗?因此,不属于java/log4j的美国regex人士可以帮助您吗?:)我能提出的唯一建议是查看允许
匹配所有字符(包括
\n
)的'DOTALL'正则表达式标志(通常是's'),以及允许
^
$
匹配行的开始/结束以及字符串的开始/结束的'MULTILINE'正则表达式标志(通常是'm')。