gpt4 book ai didi

java - 我的 EvaluatorFilter 在 Spring Boot + logback-access.xml 中不起作用

转载 作者:行者123 更新时间:2023-12-01 14:28:57 25 4
gpt4 key购买 nike

我已经设法将 logback-access.xml 与 Tomcat 项目上的 Spring Boot 集成,但在我的一生中,我无法让它尊重我的 ch.qos.logback.core.filter.EvaluatorFilter。它肯定会看到并使用我的 logback-access.xml 文件(如果我更改 encoder.pattern 输出消息也会更改),但似乎没有注意到我在那里配置的过滤器;我没有得到我正在寻找的抑制来自/healthz URL 的任何访问日志消息的效果,而且我没有看到我的 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'

日志输出 mock 我......
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 请求?

最佳答案

如果您调试 logback 配置,您将看到问题( <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值(value)。

然而,它确实有 event value 是 IAccessEvent 的一个实例.

因此,只需将您的表达式更改为以下内容即可。
<expression>
System.out.println("ROBERT!!!! " + event.getRequestURI());
return event.getRequestURI().contains("/healthz");
</expression>

关于java - 我的 EvaluatorFilter 在 Spring Boot + logback-access.xml 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44710219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com