gpt4 book ai didi

gradle - 无法使用 logback.groovy,但 logback.xml 有效

转载 作者:行者123 更新时间:2023-12-04 02:08:03 25 4
gpt4 key购买 nike

我想使用 Groovy DSL 配置 Logback。该文件非常简单:

import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.ConsoleAppender
import static ch.qos.logback.classic.Level.DEBUG
import static ch.qos.logback.classic.Level.INFO

appender("stdout", ConsoleAppender) {
encoder(PatternLayoutEncoder) {
pattern = "%d %p [%c] - <%m>%n"
}
}

root(INFO, ["stdout"])

我使用 Gradle 构建我的应用程序并使用 jettyRun 运行它。我收到以下错误:
Failed to instantiate [ch.qos.logback.classic.LoggerContext]
Reported exception:
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'ch.qos.logback.core.ConsoleAppender[null]' with class 'ch.qos.logback.core.ConsoleAppender' to class 'ch.qos.logback.core.Appender'
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:360)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:599)
at ch.qos.logback.classic.gaffer.ConfigurationDelegate.appender(ConfigurationDelegate.groovy:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at org.codehaus.groovy.runtime.metaclass.MixinInstanceMetaMethod.invoke(MixinInstanceMetaMethod.java:53)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoMetaMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:308)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:52)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)

但是,当我切换到等效的 XML 配置时,一切正常。我究竟做错了什么?

使用 Logback 1.0.0。尝试使用 Logback 1.0.3。

最佳答案

我想出了解决方案,但有些问题仍然悬而未决。问题是我在类路径上没有合适的 Groovy。我决定制作一个示例项目来演示这个错误。我从使用 Gradle 的“应用程序”插件的控制台应用程序开始。我没有将 Groovy 作为依赖项包含在内。

apply plugin: 'application'

repositories {
mavenCentral()
}

ext.logbackVersion = '1.0.3'
ext.slf4jVersion = '1.6.4'

dependencies {
compile "ch.qos.logback:logback-classic:$ext.logbackVersion"
compile "org.slf4j:jcl-over-slf4j:$ext.slf4jVersion"
//runtime "org.codehaus.groovy:groovy:1.8.6" // the problem was here
}

mainClassName = "org.test.Main"

这给了我一个错误,这是非常简单的。
|-ERROR in ch.qos.logback.classic.LoggerContext[default] - Groovy classes are not available on the class path. ABORTING INITIALIZATION.

嗯不错。缺少依赖项 - 易于修复。但是为什么我在运行 Web 应用程序时没有遇到同样的错误?添加 Groovy 依赖解决了 Web 应用程序中的初始问题。我剥离了我的项目并将创建一个相应的 JIRA。也许,Groovy 对类路径检测不太正确。

关于gradle - 无法使用 logback.groovy,但 logback.xml 有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10995414/

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