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

如何消除Groovy日志中的IndyInterface fromCache冗余信息

Groovy IndyInterface 冗余日志问题分析与解决

日志含义

org.codehaus.groovy.vmplugin.v8.IndyInterface fromCache 是Groovy invokedynamic(简称Indy)特性的调试输出:

  • Indy是Java 7引入的动态调用优化特性,Groovy通过它提升动态方法调用的性能
  • fromCache 日志表示Groovy正在复用已缓存的Indy调用点,本质是调试级别的信息,正常情况下不应以INFO级别输出。

已尝试方法无效的原因

你用的groovy.indy.logging=false参数是Groovy早期版本的控制项,部分新版本已不再读取该配置;而直接设置Logger级别无效,大概率是因为java.util.logging中Handler的级别优先级高于Logger本身级别,或者你的Logger配置被系统默认的logging.properties覆盖了。

有效解决方法

方法1:直接禁用目标Logger的输出

在代码最开始的位置(比如main方法第一行、静态初始化块)添加以下代码:

import java.util.logging.Logger
import java.util.logging.Level

def indyLogger = Logger.getLogger("org.codehaus.groovy.vmplugin.v8.IndyInterface")
indyLogger.setLevel(Level.OFF)
// 关闭父Logger的日志传递,避免父Handler输出该日志
indyLogger.setUseParentHandlers(false)

核心是setUseParentHandlers(false)——即使你设置了Logger级别,父Logger的Handler依然可能输出日志,关闭继承能彻底切断这条日志的输出路径。

方法2:修改系统日志配置文件

找到JRE目录下的lib/logging.properties(或通过-Djava.util.logging.config.file=自定义路径指定配置文件),添加一行:

org.codehaus.groovy.vmplugin.v8.IndyInterface.level = OFF

这种方式全局生效,适合所有使用该JRE环境的应用。

方法3:调整Handler级别(兜底方案)

如果前两种方法无效,说明默认的ConsoleHandler级别设置为INFO,导致所有INFO级日志都被输出。可以针对性调整:

import java.util.logging.Logger
import java.util.logging.Level
import java.util.logging.ConsoleHandler

def indyLogger = Logger.getLogger("org.codehaus.groovy.vmplugin.v8.IndyInterface")
indyLogger.setLevel(Level.OFF)
indyLogger.setUseParentHandlers(false)

// 若需要保留该Logger的严重错误日志,可添加指定级别的Handler
def handler = new ConsoleHandler()
handler.setLevel(Level.SEVERE)
indyLogger.addHandler(handler)

内容的提问来源于stack exchange,提问作者mmo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:55:24