最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

java - Slf4j with Logback breaks when moving from Groovy 2.5.23 to Groovy 4.0.25 - Stack Overflow

programmeradmin3浏览0评论

I have the following Logging.groovy

import ch.qos.logback.classic.Level
import ch.qos.logback.classic.LoggerContext
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.ConsoleAppender
import .slf4j.Logger
import .slf4j.LoggerFactory

static void setupLibraryLoggers() {
    def jgitLogger = LoggerFactory.getLogger(".eclipse.jgit")
    jgitLogger.setLevel(Level.INFO)
}

static Logger setupLogger() {
    LoggerContext logCtx = LoggerFactory.getILoggerFactory();

    PatternLayoutEncoder logEncoder = new PatternLayoutEncoder();
    logEncoder.setContext(logCtx);
    logEncoder.setPattern("%-12date{YYYY-MM-dd HH:mm:ss.SSS} %highlight(%-5level) - %msg%n");
    logEncoder.start();

    ConsoleAppender logConsoleAppender = new ConsoleAppender();
    logConsoleAppender.setContext(logCtx);
    logConsoleAppender.setName("console");
    logConsoleAppender.setEncoder(logEncoder);
    logConsoleAppender.start();

    Logger log = logCtx.getLogger(this.class);
    log.setAdditive(false);
    log.setLevel(Level.DEBUG);
    log.addAppender(logConsoleAppender);
    return log;
}

In the same directory, I have the following Runner.groovy

@Grapes(
    [
        @Grab(group = '.eclipse.jgit', module = '.eclipse.jgit', version = '7.1.0.202411261347-r'),
        @Grab(group = 'ch.qos.logback', module = 'logback-classic', version = '1.5.16'),
        @Grab(group='de.gesellix', module='docker-client', version='2025-01-19T00-00-00'),
        @Grab(group='commons-io', module='commons-io', version='2.18.0'),
        @Grab(group='.apachemons', module='commons-compress', version='1.27.1')
    ]
)
import static Logging.setupLogger
import static Logging.setupLibraryLoggers

Logging.setupLibraryLoggers()
log = Logging.setupLogger()
log.info("Test")

If I run this with Groovy 2.5.23, this works correctly. However, if I try to go up to Groovy

/usr/local/groovy-4.0.25/bin/groovy -cp $HOME/workspace/jobs ~/workspace/jobs/Runner.groovy
SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation
SLF4J(W): See .html#noProviders for further details.
Caught: groovy.lang.MissingMethodException: No signature of method: .slf4j.helpers.NOPLogger.setLevel() is applicable for argument types: (ch.qos.logback.classic.Level) values: [INFO]
groovy.lang.MissingMethodException: No signature of method: .slf4j.helpers.NOPLogger.setLevel() is applicable for argument types: (ch.qos.logback.classic.Level) values: [INFO]
        at Logging.setupLibraryLoggers(Logging.groovy:10)
        at Runner.run(Runner.groovy:18)

It looks like I'm importing the correct logback library (grape). Why does going up to Groovy 4 cause SLF4J to not correctly identify and load the Logback logging backend?

发布评论

评论列表(0)

  1. 暂无评论