我在log4j的XML文件中的以下布局图案:过滤日志通过匹配模式 - log4j的
"%d{ISO8601} %c %p [%t] [%x] 9.5.4.RC12 %m%n"
我想的是,当过我得到消息包含process [proc#] completed
日志,它应该是跳过。我的意思是除了包含此消息的日志以外,每个日志都应该打印。 [proc#]
将包含最大长度为4的进程编号。 我可以在我的xml配置文件中使用此函数设计过滤器。如果是这样,那么怎么样?
我在log4j的XML文件中的以下布局图案:过滤日志通过匹配模式 - log4j的
"%d{ISO8601} %c %p [%t] [%x] 9.5.4.RC12 %m%n"
我想的是,当过我得到消息包含process [proc#] completed
日志,它应该是跳过。我的意思是除了包含此消息的日志以外,每个日志都应该打印。 [proc#]
将包含最大长度为4的进程编号。 我可以在我的xml配置文件中使用此函数设计过滤器。如果是这样,那么怎么样?
ExpressionFilter可以做到这一点。
在附加器定义内部的过滤器定义,使用类似的表达式(注意LIKE是正则表达式匹配操作符): “ '[。* \]过程\完成' MSG LIKE”
见ExpressionFilter的javadoc这里:
http://logging.apache.org/log4j/companions/apidocs/org/apache/log4j/filter/ExpressionFilter.html
这里一个例子:
http://blog.trifork.com/2011/08/23/filtering-specific-exceptions-when-using-log4j/
这就是我配置log4j以通过IP地址过滤出来的方式。特别是127.0.0.1
,如下图log4j.xml
所示。请注意,您还必须包含以及log4j.xml
。您必须使用XML语法。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="CATALINA"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<param name="Encoding" value="UTF-8" />
<param name="File" value="${catalina.base}/logs/catalina" />
<layout class="net.logstash.log4j.JSONEventLayoutV1" />
</appender>
<appender name="CATALINAOUT"
class="org.apache.log4j.ConsoleAppender">
<param name="Append" value="true" />
<param name="Encoding" value="UTF-8" />
<param name="File" value="${catalina.base}/logs/catalina.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.filter.ExpressionFilter">
<param name="expression" value="MSG LIKE '127.0.0.1'" />
<param name="acceptOnMatch" value="false"/>
</filter>
</appender>
<appender name="LOCALHOST" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<param name="Encoding" value="UTF-8" />
<param name="File" value="${catalina.base}/logs/localhost" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c- %m%n" />
</layout>
</appender>
<logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]">
<level value="INFO" />
<appender-ref ref="LOCALHOST" />
</logger>
<root>
<level value="INFO" />
<appender-ref ref="CATALINA" />
<appender-ref ref="CATALINAOUT" />
</root>
</log4j:configuration>
有一个方便的工具可以将'log4j.properties'转换为'log4j.xml'。我用它来产生一切,但是'
'〜='操作符做什么?' –
这是一个不区分大小写的部分文本匹配。 – Scott
谢谢。是否有所有运营商的名单及其含义? –