【发布时间】:2011-07-09 08:03:45
【问题描述】:
我正在使用 Log4j LogFilePatternReceiver 类来读取一些简单的日志文件,并且想知道是否有任何方法可以告诉 Log4j 将格式修饰符解释为可选。
例如,假设以下模式:
%r [%t] %p %c %x - %m%n
这匹配字符串
123 [main] INFO org.apache.log4j.whatever x=8 - Just a message.
但不是字符串
123 [main] INFO org.apache.log4j.whatever - Just a message.
(即,与上面相同,但没有“x=8”部分)。
有没有办法告诉 Log4j 两者都匹配?
在另一个相关说明中,我在LogFilePatternReceiver 的源代码中添加了几个额外的打印语句,我明白了
Pattern: {%r [%t] %p %c %x - %m%n}
Regex: {(.*?)[ ]+\[(.*?)\][ ]+(\S*\s*?)[ ]+(\S*\s*?)[ ]+(.*)[ ]+\-[ ]+(.*?)}
大括号只是表示每个表达式的开始/结束而不属于它,只是为了确保没有额外的空格或其他字符涉及。正则表达式由LogFilePatternReceiver 创建,位于其initialize() 方法的末尾。
尝试regexpal.com 中的正则表达式,我只得到了不包括消息的部分的匹配,即匹配是,根据正则表达式,
123 [main] INFO org.apache.log4j.whatever x=8 -
(末尾有一个空格)。显然,正则表达式需要用 $ 符号关闭才能包含消息。
我在模式定义中有什么错误吗?
【问题讨论】:
标签: java regex log4j pattern-matching apache-chainsaw