2017-06-22 56 views
1

私はlogback-access.xmlをTomcatプロジェクトのSpring Bootと統合することができましたが、私の人生では私のchを尊重することはできません.qos.logback.core.filter.EvaluatorFilter。 logback-access.xmlファイルを確実に見て、使用します(出力メッセージが変更された場合は、エンコーダを変更します)。私は、/ healthz URLからのアクセスログメッセージを抑制していて、System.out.printlnが叫んでヘルプが表示されないという、私が探している効果は得られません。Spring Boot + logback-access.xmlでEvaluatorFilterが動作しない

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ブート1.4.1でlogback-access.xmlのch.qos.logback.core.filter.EvaluatorFilterを取得してGET/healthzリクエストをスキップするにはどうすればよいですか?

+0

グリル。私はバージョンアップしてすべて同じ問題を抱えています。 logback-access.xmlは、Springブート1.5.4でEvaluatorFilterを実行しません。 –

+0

暗闇の中で撮影しましたが、 ''の ''を囲んでみましたか?同様に: '' – kunruh

答えて

2

ログバック設定をデバッグすると、問題(<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 

問題は、むしろそれがIAccessEvent上で動作し、logback-アクセスがILoggingEvent上で動作しないということです。

イベントタイプごとにJaninoEventEvaluatorクラスがあります。
ログバックアクセスエバリュエータにはformattedMessageの値がありません。

しかしながら、それはIAccessEventのインスタンスであるeventの値を持っています。

したがって、式を次のように変更するだけで効果があります。

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

あなたはda Manです!それはチャンピオンのように働く。だから私はもう12時間賞金を授与させませんが、安心してください。それはあなたの方法で来ている –

関連する問題