首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有方法签名: logback.appender()

没有方法签名: logback.appender()
EN

Stack Overflow用户
提问于 2016-06-10 15:51:11
回答 1查看 847关注 0票数 1

我有一个问题,运行一个通过logback.groovy文件定义的登录项目。运行logback.xml配置时不会出现此类问题

以下是logback.xml配置的示例:

代码语言:javascript
复制
<configuration>

    <appender name="testflow" class="ch.qos.logback.core.FileAppender" file="dbGripTest.log">
        <encoder>
            <pattern>%d{MMM d HH:mm:ss.SSS,UTC} %5p - %m [%ex] [%c{0}:%L] [%t]%n</pattern>
        </encoder>
    </appender>

    <appender name="consoleMain" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{MMM d HH:mm:ss.SSS,UTC} %5p - %m [%ex] [%c{0}:%L] [%t]%n</pattern>
        </encoder>
    </appender>

    <appender name="consoleSolace" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{MMM d HH:mm:ss.SSS,UTC} %5p - %m [%c{0}]%n</pattern>
        </encoder>
    </appender>


    <root level="ERROR"/>
    <logger name="com.db.testing" level="DEBUG">
        <appender-ref ref="consoleMain" />
        <appender-ref ref="testflow" />
    </logger>
    <logger name="com.db.taps" level="DEBUG">
        <appender-ref ref="consoleSolace" />
        <appender-ref ref="testflow" />
    </logger>

</configuration>

以下是logback.groovy文件的内容:

代码语言:javascript
复制
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.ConsoleAppender
import ch.qos.logback.core.FileAppender

import static ch.qos.logback.classic.Level.DEBUG
import static ch.qos.logback.classic.Level.INFO
import static ch.qos.logback.classic.Level.ERROR

appender("testflow", FileAppender) {
    file = "dbGripTest.log"
    append = false
    encoder(PatternLayoutEncoder) {
        pattern = "%d{MMM d HH:mm:ss.SSS,UTC} %5p - %m [%ex] [%c{0}:%L] [%t]%n"
    }
}

appender("consoleMain", ConsoleAppender) {
    encoder(PatternLayoutEncoder) {
        pattern = "%d{MMM d HH:mm:ss.SSS,UTC} %5p - %m [%ex] [%c{0}:%L] [%t]%n"
    }
}
appender("consoleSolace", ConsoleAppender) {
    encoder(PatternLayoutEncoder) {
        pattern = "%d{MMM d HH:mm:ss.SSS,UTC} %5p - %m [%c{0}]%n"
    }
}


root(ERROR)

logger("com.db.testing", DEBUG, ["testflow","consoleMain"])
logger("com.db.taps",DEBUG, ["testflow","consoleSolace"])

这就是我在使用groovy config运行应用程序时得到的结果:

代码语言:javascript
复制
Jun 10 07:37:33.312  INFO - Transport Receiver is listening on: [, idgrip/ccr/ext/abfx/request/uk] [SolaceTransport]
Jun 10 07:37:33.948 DEBUG - SNAP objects have been created [] [SNAPAdapter:-1] [main]
Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: logback.appender() is applicable for argument types: (java.lang.String, java.lang.Class, logback$_run_closure1) values: [testflow, class ch.qos.logback.core.FileAppender, logback$_run_closure1@1a45193b]
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:56)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:151)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:179)
    at logback.run(logback.groovy:9)
    at cucumber.runtime.groovy.GroovyBackend.runIfScript(GroovyBackend.java:95)
    at cucumber.runtime.groovy.GroovyBackend.loadGlue(GroovyBackend.java:77)
    at cucumber.runtime.Runtime.<init>(Runtime.java:91)
    at cucumber.runtime.Runtime.<init>(Runtime.java:69)
    at cucumber.runtime.Runtime.<init>(Runtime.java:65)
    at cucumber.api.cli.Main.run(Main.java:35)
    at cucumber.api.cli.Main.main(Main.java:18)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

真正奇怪的是,输出实际上是按照配置文件中的说明进行格式化的-即,第一个字符串使用"consoleSolace“模式,第二个字符串使用"consoleMain”模式,因此文件以某种方式被使用和解释。

使用的版本(来自依赖关系树插件):

代码语言:javascript
复制
[INFO] +- ch.qos.logback:logback-classic:jar:0.9.28.1:compile
[INFO] |  \- ch.qos.logback:logback-core:jar:0.9.28.1:compile
[INFO] +- org.codehaus.groovy:groovy-all:jar:2.4.3:compile

你知道是什么导致了这种行为吗?根据http://logback.qos.ch/manual/groovy.html的说法,这正是应该在logback.groovy中声明附加器的方式

EN

回答 1

Stack Overflow用户

发布于 2016-06-10 19:33:59

当我修复另一个由Cucumber引起的问题时,我决定在这里检查它是否有帮助。事实的确如此。

这是因为这个.groovy文件被粘合在Cucumber启动配置中,并且Cucumber似乎尝试执行遇到的所有.groovy文件。在我将launcher中的Glue更改为仅指向功能文件后,此错误消失了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37742815

复制
相关文章

相似问题

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