2016-11-15 62 views
0

如何將所有WARN文件和控制檯記錄到日誌中,但my.package只能用於文件的DEBUG?積壓不同級別的多用途零件

我想:

<configuration> 
    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> 
     </encoder> 
     <File>target/log/test-log</File> 
     <append>false</append> 
    </appender> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <logger name="my.package" level="WARN"> 
     <appender-ref ref="STDOUT"/> 
    </logger> 

    <logger name="my.package" level="DEBUG"> 
     <appender-ref ref="FILE" /> 
    </logger> 

    <root level="WARN"> 
     <appender-ref ref="STDOUT" /> 
     <appender-ref ref="FILE" /> 
    </root> 
</configuration> 

但它會記錄所有在控制檯DEBUG了。

這也不起作用:

<configuration> 
    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> 
     </encoder> 
     <File>target/log/test-log</File> 
     <append>false</append> 
    </appender> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <logger name="io.chumps"> 
     <appender-ref ref="STDOUT" level="WARN"/> 
     <appender-ref ref="FILE" level="DEBUG" /> 
    </logger> 

    <root> 
     <appender-ref ref="STDOUT" level="WARN" /> 
     <appender-ref ref="FILE" level="WARN" /> 
    </root> 
</configuration> 

回答

0

解決它使用GEventEvaluator定製Groovy腳本: http://logback.qos.ch/manual/filters.html#GEventEvaluator

<configuration> 
    <property name="LAYOUT" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n" /> 

    <root> 
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
      <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> 
       <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator"> 
        <expression>e.level.toInt() >= WARN.toInt()</expression> 
       </evaluator> 
       <OnMatch>ACCEPT</OnMatch> 
       <OnMismatch>DENY</OnMismatch> 
      </filter> 
      <encoder> 
       <pattern>${LAYOUT}</pattern> 
      </encoder> 
     </appender> 

     <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
      <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> 
       <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator"> 
        <expression> 
         e.level.toInt() >= WARN.toInt() || 
         (e.level.toInt() >= TRACE.toInt() &amp;&amp; e.getLoggerName().startsWith("my.package")) 
        </expression> 
       </evaluator> 
       <OnMatch>ACCEPT</OnMatch> 
       <OnMismatch>DENY</OnMismatch> 
      </filter> 
      <encoder> 
       <pattern>${LAYOUT}</pattern> 
      </encoder> 
      <File>target/log/test-log</File> 
      <append>false</append> 
     </appender> 
    </root> 
</configuration> 

我無法相信這個如此簡單的用例是默認不支持。