首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用logback.groovy,但logback.xml可以工作

无法使用logback.groovy,但logback.xml可以工作
EN

Stack Overflow用户
提问于 2012-06-12 19:06:53
回答 3查看 9.1K关注 0票数 13

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

代码语言:javascript
复制
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上运行它。我得到以下错误:

代码语言:javascript
复制
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。

EN

回答 3

Stack Overflow用户

发布于 2012-06-13 20:51:42

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

代码语言:javascript
复制
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"

这给了我一个错误,这是非常简单的。

代码语言:javascript
复制
|-ERROR in ch.qos.logback.classic.LoggerContext[default] - Groovy classes are not available on the class path. ABORTING INITIALIZATION.

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

票数 14
EN

Stack Overflow用户

发布于 2012-06-12 22:04:53

GroovyCastException“不能将ConsoleAppender转换为附加器”涉及到类加载器的所有问题。这是groovy的哪个版本?你能打开一个包含测试用例的bug report来重现这个问题吗?

票数 1
EN

Stack Overflow用户

发布于 2016-09-04 02:36:50

同事们。

今天我遇到了几乎同样的麻烦:

  • 当我使用logback.xml时一切都很好
  • 当我在IntelliJ IDEA中使用logback.groovy时一切都很好
  • 当我使用logback.groovy从命令行启动脚本时我收到很多错误,如<代码>H29<代码>F210

代码语言:javascript
复制
D:\Projects\PRDMonitoring\sources>groovy tray.groovy PRD
Failed to instantiate [ch.qos.logback.classic.LoggerContext]
Reported exception:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script1.groovy: 2: unable to resolve class ch.qos.logback.classic.filter.LevelFilter
@ line 2, column 1.
   import ch.qos.logback.classic.filter.LevelFilter
   ^
Script1.groovy: -1: unable to resolve class ch.qos.logback.classic.encoder.PatternLayoutEncoder
 @ line -1, column -1.
Script1.groovy: 3: unable to resolve class ch.qos.logback.core.ConsoleAppender
 @ line 3, column 1.
   import ch.qos.logback.core.ConsoleAppender
   ^
Script1.groovy: -1: unable to resolve class ch.qos.logback.classic.Level
 @ line -1, column -1.
Script1.groovy: 6: unable to resolve class ch.qos.logback.core.spi.FilterReply
 @ line 6, column 1.
   import static ch.qos.logback.core.spi.FilterReply.ACCEPT
   ^
Script1.groovy: 7: unable to resolve class ch.qos.logback.core.spi.FilterReply
 @ line 7, column 1.
   import static ch.qos.logback.core.spi.FilterReply.DENY

但是几分钟后,我找到了一个解决方案,下面的字符串 @Grapes注释之前修复了一个装入@GrabConfig(systemClassLoader=true)的类的问题

代码语言:javascript
复制
@GrabConfig(systemClassLoader=true)
@Grapes([
    @Grab(group = 'org.codehaus.groovy.modules.http-builder', module = 'http-builder', version = '0.6'),
    @Grab(group = 'org.apache.commons', module='commons-lang3', version='3.0'),
    @Grab(group = 'commons-io', module = 'commons-io', version = '2.4'),
    @Grab(group = 'joda-time', module = 'joda-time', version = '2.9.4'),
    @Grab(group = 'ch.qos.logback', module = 'logback-classic', version = '1.1.7'),
    @Grab(group = 'ch.qos.logback', module = 'logback-core', version = '1.1.7')
])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10995414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档