You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

依赖升级后Logback启动报错:marker is not an rvalue求助

问题解决:Logback EvaluatorFilter启动报错"Expression 'marker' is not an rvalue"

问题根源

升级到Logback 1.4.x(配合Spring Boot 3.x和Java 17)后,Janino表达式的上下文变量暴露方式发生了变化:原来直接引用的marker变量不再直接可用,必须通过日志事件对象event的getMarker()方法获取标记实例。旧写法在新版本中会被Janino判定为非法的右值,导致编译失败。

解决方案

修改logback-spring.xml中的EvaluatorFilter表达式,将直接引用marker改为通过event.getMarker()获取,并保留类型判断逻辑:

<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
    <evaluator>
        <expression>
            return event.getMarker() instanceof com.package.logging.Metrics.Marker;
        </expression>
    </evaluator>
    <onMatch>DENY</onMatch>
    <onMismatch>NEUTRAL</onMismatch>
</filter>

额外优化(可选)

为了更严谨地处理日志事件无标记的场景(instanceof本身会自动处理null返回false),可以显式增加空判断:

<expression>
    return event.getMarker() != null && event.getMarker() instanceof com.package.logging.Metrics.Marker;
</expression>

验证

修改配置后重新启动应用,启动报错会消失,过滤器将恢复正常工作,正确拦截标记为Metrics.Marker的日志事件。

内容的提问来源于stack exchange,提问作者dev-rifaii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:38:23