Is it possible to suppress only Warn messages in Log4j2 while allowing all others

前端 未结 2 1155
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-22 08:22

I am using log4j2 to log messages in console and in a file. I am getting a lot of Warn message which I do not want. I only want to see Debug and other messages. is it possib

相关标签:
2条回答
  • 2020-12-22 08:34

    You can use the LevelRangeFilter to reject the log events.

    Here's a simple class that generates some logs:

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class SomeClass {
    
        private static final Logger log = LogManager.getLogger();   
    
        public static void main(String[] args){
    
            if(log.isDebugEnabled())
                log.debug("This is some debug!");
            log.info("Here's some info!");
            log.warn("Warning will be rejected.");
            log.error("Some error happened!");
        }
    }
    

    Here's a basic configuration that just sends all events to console:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            </Console>
        </Appenders>
    
        <Loggers>
            <Root level="ALL">
                <AppenderRef ref="Console" />
            </Root>
        </Loggers>
    </Configuration>
    

    The output generated by the above is:

    21:08:42.215 [main] DEBUG example.SomeClass - This is some debug!
    21:08:42.217 [main] INFO  example.SomeClass - Here's some info!
    21:08:42.217 [main] WARN  example.SomeClass - Warning will be rejected.
    21:08:42.217 [main] ERROR example.SomeClass - Some error happened!
    

    Now we add the LevelRangeFilter to the Console appender:

        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <LevelRangeFilter minLevel="WARN" maxLevel="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
        </Console>
    

    Now the output is:

    21:15:26.987 [main] DEBUG example.SomeClass - This is some debug!
    21:15:26.989 [main] INFO  example.SomeClass - Here's some info!
    21:15:26.989 [main] ERROR example.SomeClass - Some error happened!
    

    As you can see the WARN message is not logged to console.

    0 讨论(0)
  • 2020-12-22 08:59
    Try threshold filters as follows:
    
    <Configuration status="error">
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
              <Filters>
                     <!-- Accept error and fatal messages -->
                     <ThresholdFilter level="error"  onMatch="ACCEPT"   onMismatch="NEUTRAL"/>
    
                     <!-- Reject Warn messages -->
                     <ThresholdFilter level="warn"  onMatch="DENY"   onMismatch="NEUTRAL"/>
    
                     <!-- This filter accepts debug, trace, info, error, fatal  -->
                     <ThresholdFilter level="trace"  onMatch="ACCEPT" onMismatch="DENY"/>
                </Filters>      
                <PatternLayout pattern="[%d{DEFAULT}][%5p][%t][%c{1}] - %m%n" />
            </Console>
            <File name="MyFile" fileName="logs/java.log" immediateFlush="false" append="true">
              <Filters>
                     <!-- Accept error and fatal messages -->
                     <ThresholdFilter level="error"  onMatch="ACCEPT"   onMismatch="NEUTRAL"/>
    
                     <!-- Reject Warn messages -->
                     <ThresholdFilter level="warn"  onMatch="DENY"   onMismatch="NEUTRAL"/>
    
                     <!-- This filter accepts debug, trace, info, error, fatal  -->
                     <ThresholdFilter level="trace"  onMatch="ACCEPT" onMismatch="DENY"/>
                </Filters>      
                <PatternLayout pattern="[%d{DEFAULT}][%5p][%t][%c{1}] - %m%n"/>
            </File>
        </Appenders>
        <Loggers>
            <Root level="debug">
                <AppenderRef ref="Console" />
                <AppenderRef ref="MyFile"/>
            </Root>
        </Loggers>
    </Configuration>
    
    0 讨论(0)
提交回复
热议问题