3
votes

here is my java logback configuration:

<?xml version="1.0" encoding="UTF-8"?>
  <configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
    <encoder charset="UTF-8">
        <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n></pattern>
    </encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <encoder charset="UTF-8">
        <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
        </pattern>
    </encoder>
</appender>
    <logger name="org.apache.zookeeper"  additivity="false">  
     <appender-ref ref="stdout"/>  
   </logger>
   <logger name="com.hazelcast"  additivity="false">  
      <appender-ref ref="stdout"/>  
 </logger>  
<root level="INFO">
    <appender-ref ref="FILE" />
</root>

what i want to do here is: I have two log appenders: one for console,and another for log file; But for the same java package(for example:org.apache.zookeeper) I want use two different log level,INFO for file appender and ERROR for condole; But my log configuration upside doesn't work right. Can anyone figure out my errors or some solutions?

2

2 Answers

2
votes

Since the log level per Java package can only be defined globally, you may use a ThresholdFilter to filter all levels below ERROR in your console appender.

1
votes

you can just block them:

    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">  
        <evaluator>   
            <expression>logger.contains("zookeeper") || logger.contains("hazelcast")    </expression>  
        </evaluator>  
        <OnMismatch>ACCEPT</OnMismatch>  
        <OnMatch>DENY</OnMatch>  
    </filter>