How can I configure Logback to log different levels for a logger to different destinations?

前端 未结 12 1793
挽巷
挽巷 2020-11-28 18:37

How can I configure Logback to log different levels for a logger to different destinations?

For example, given the following Logback configuration, will Logback reco

12条回答
  •  独厮守ぢ
    2020-11-28 18:50

    I use logback.groovy to configure my logback but you can do it with xml config as well:

    import static ch.qos.logback.classic.Level.*
    import static ch.qos.logback.core.spi.FilterReply.DENY
    import static ch.qos.logback.core.spi.FilterReply.NEUTRAL
    import ch.qos.logback.classic.boolex.GEventEvaluator
    import ch.qos.logback.classic.encoder.PatternLayoutEncoder
    import ch.qos.logback.core.ConsoleAppender
    import ch.qos.logback.core.filter.EvaluatorFilter
    
    def patternExpression = "%date{ISO8601} [%5level] %msg%n"
    
    appender("STDERR", ConsoleAppender) {
        filter(EvaluatorFilter) {
          evaluator(GEventEvaluator) {
            expression = 'e.level.toInt() >= WARN.toInt()'
          }
          onMatch = NEUTRAL
          onMismatch = DENY
        }
        encoder(PatternLayoutEncoder) {
          pattern = patternExpression
        }
        target = "System.err"
      }
    
    appender("STDOUT", ConsoleAppender) {
        filter(EvaluatorFilter) {
          evaluator(GEventEvaluator) {
            expression = 'e.level.toInt() < WARN.toInt()'
          }
          onMismatch = DENY
          onMatch = NEUTRAL
        }
        encoder(PatternLayoutEncoder) {
          pattern = patternExpression
        }
        target = "System.out"
    }
    
    logger("org.hibernate.type", WARN)
    logger("org.hibernate", WARN)
    logger("org.springframework", WARN)
    
    root(INFO,["STDERR","STDOUT"])
    

    I think to use GEventEvaluator is simplier because there is no need to create filter classes.
    I apologize for my English!

提交回复
热议问题