How to create 2 different ROOT loggers with logback?

前端 未结 2 402

I\'m happily using SLF4J with logback and use 2 appenders for the ROOT logger.


    

        
相关标签:
2条回答
  • 2020-12-29 01:39

    You will not ever have more than one root-logger, so your question is a bit misleading. What you are looking for is how to fine-tune which events each of the appenders does log.

    And for that, you add a ThresholdFilter to each of the appenders:

    http://logback.qos.ch/manual/filters.html#thresholdFilter

    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>INFO</level>
    </filter>
    

    Configure level INFO for the FILE-appender and DEBUG for STDOUT.

    Edit: I have to dispute the other answer's charge that this one is wrong: Yes, you can have more than one root-element in the configuration. That does not create more than one root-logger though, which was what the question's title asks for. Also, the logback manual states under http://logback.qos.ch/manual/configuration.html#syntax (highlighting mine):

    Nevertheless, the very basic structure of the configuration file can be described as, < configuration > element, followed by zero or more < appender > elements, followed by zero or more < logger > elements, followed by at most one < root > element.

    It might work, but at the very least it's against convention.

    0 讨论(0)
  • 2020-12-29 01:41

    You can have multiple root elements, each with an associated logging level and an appender-ref (I'm working with logback.version>1.0.13) In this case you also have to put a FILTER inside yours appenders, like that:

    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
        <resetJUL>true</resetJUL>
    </contextListener>
    
    <!-- To enable JMX Management -->
    <jmxConfigurator/>
    
    <appender name="console-info" class="ch.qos.logback.core.ConsoleAppender">
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>INFO</level>
         <onMatch>ACCEPT</onMatch>
         <onMismatch>DENY</onMismatch>
      </filter>
      <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
      </encoder>
    </appender>  
    
    <appender name="console-debug" class="ch.qos.logback.core.ConsoleAppender">
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>DEBUG</level>
         <onMatch>ACCEPT</onMatch>
         <onMismatch>DENY</onMismatch>
      </filter>
      <encoder>
          <pattern>[%d{ddMMMyyyy HH:mm:ss.SS}]%-5level %logger{45} - %msg %n</pattern>
      </encoder>
    </appender>
    
    
    <root level="info">
        <appender-ref ref="console-info"/>
    </root>
    <root level="debug">
        <appender-ref ref="console-debug"/>
    </root>
    

    0 讨论(0)
提交回复
热议问题