2017-06-22 593 views
1

我已經設法將logback-access.xml與Tomcat項目中的Spring Boot集成在一起,但對於我來說,我無法讓它尊重我的ch .qos.logback.core.filter.EvaluatorFilter。它肯定會看到並使用我的logback-access.xml文件(如果我更改了encoder.pattern,輸出消息發生了變化),但似乎忘記了我在那裏配置的過濾器;我沒有得到我正在尋找的效果,即抑制來自/ healthz URL的任何訪問日誌消息,並且我沒有看到我的System.out.println呼救。我的EvaluatorFilter不能在Spring Boot + logback-access.xml中工作

logback-access.xml文件貌似

<configuration> 
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
     <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> 
      <evaluator> 
       <expression> 
        System.out.println("ROBERT!!!! " + formattedMessage); 
        return formattedMessage.contains("/healthz"); 
       </expression> 
      </evaluator> 
      <OnMismatch>NEUTRAL</OnMismatch> 
      <OnMatch>DENY</OnMatch> 
     </filter> 
     <encoder> 
      <pattern>%h %l %u %user %date "%r" %s %b</pattern> 
     </encoder> 
    </appender> 
    <appender-ref ref="CONSOLE"/> 
</configuration> 

中的build.gradle有必要依賴

compile(group: 'net.rakugakibox.springbootext', name: 'spring-boot-ext-logback-access', version: '1.6') 
    compile group: 'org.codehaus.janino', name: 'janino', version: '3.0.7' 

的日誌輸出嘲笑我......

0:0:0:0:0:0:0:1 - - - 22/Jun/2017:15:16:17 -0700 "GET /healthz HTTP/1.1" 200 27 
0:0:0:0:0:0:0:1 - - - 22/Jun/2017:15:18:18 -0700 "GET /v1/scouting_activities/fcdc7aae-4f11-4476-bb81-6d5e3f52e1b4 HTTP/1.1" 200 1939 

如何在Spring Boot 1.4.1下的logback-access.xml中獲取ch.qos.logback.core.filter.EvaluatorFilter以運行並跳過GET/healthz請求?

+0

Grrr。我的版本升高了所有內容並且有同樣的問題。 logback-access.xml永遠不會在Spring Boot 1.5.4中執行它的EvaluatorFilter。 –

+0

在黑暗中拍攝,但是您是否嘗試圍繞''中的''?像這樣:'' – kunruh

回答

2

如果您調試了logback配置,您將會看到問題(<configuration debug="true">)。

11:03:53,559 |-ERROR in [email protected] - Could not start evaluator with expression [System.out.println("ROBERT!!!! " + formattedMessage); 
        return false;] org.codehaus.commons.compiler.CompileException: Line 1, Column 52: Expression "formattedMessage" is not an rvalue 
    at org.codehaus.commons.compiler.CompileException: Line 1, Column 52: Expression "formattedMessage" is not an rvalue 

的問題是,的logback訪問不會對ILoggingEvent操作,而它IAccessEvent工作。

每種類型的事件都有JaninoEventEvaluator類。
logback-access評估程序沒有formattedMessage值。

但它確實有event值,它是IAccessEvent的一個實例。

所以,只要改變你的表達式到下面,它應該工作。

<expression> 
    System.out.println("ROBERT!!!! " + event.getRequestURI()); 
    return event.getRequestURI().contains("/healthz"); 
</expression> 
+0

你是達曼!這就像一個冠軍。因此,我不會讓我在另外12個小時內獎勵賞金,但請放心。它來了你的方式 –

相關問題