2014-01-23 143 views
4

我在log4j的XML文件中的以下布局图案:过滤日志通过匹配模式 - log4j的

"%d{ISO8601} %c %p [%t] [%x] 9.5.4.RC12 %m%n"

我想的是,当过我得到消息包含process [proc#] completed日志,它应该是跳过。我的意思是除了包含此消息的日志以外,每个日志都应该打印。 [proc#]将包含最大长度为4的进程编号。 我可以在我的xml配置文件中使用此函数设计过滤器。如果是这样,那么怎么样?

回答

5

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/

+0

'〜='操作符做什么?' –

+0

这是一个不区分大小写的部分文本匹配。 – Scott

+0

谢谢。是否有所有运营商的名单及其含义? –

2

这就是我配置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> 
+0

有一个方便的工具可以将'log4j.properties'转换为'log4j.xml'。我用它来产生一切,但是''元素。 https://github.com/jroyals/log4j-properties-converter – wsams