我设法将logback-access.xml与Tomcat项目上的Spring Boot集成在一起,但就我而言,我无法尊重我的ch.qos.logback.core.filter.EvaluatorFilter。它肯定会看到并使用我的logback-access.xml文件(如果我更改了编辑器.pattern,输出消息会改变),但似乎忘记了我在那里配置的过滤器;我没有得到我正在寻找的效果,这是从/ healthz网址抑制任何访问日志消息,我没有看到我的System.out.println求助
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 :(得分:2)
如果您调试回溯配置,您将看到问题(<configuration debug="true">
)。
11:03:53,559 |-ERROR in ch.qos.logback.access.boolex.JaninoEventEvaluator@649725e3 - 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-access不能在ILoggingEvent
上运行,而是在IAccessEvent
上运行。
每种类型的活动都有JaninoEventEvaluator
个班级
logback-access评估程序没有formattedMessage
值。
但它具有event
值,它是IAccessEvent
的实例。
所以,只需将表达式更改为以下内容即可。
<expression>
System.out.println("ROBERT!!!! " + event.getRequestURI());
return event.getRequestURI().contains("/healthz");
</expression>