2016-06-10 28 views
1

Ich habe ein Problem beim Ausführen eines Projekts mit Logback durch logback.groovy Datei definiert. Kein solches Problem erscheint, wenn logback.xml KonfigurationKeine Signatur der Methode: logback.appender()

Hier ist ein Beispiel von logback.xml Config ausgeführt wird:

<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> 

Hier sind Inhalt logback.groovy Datei:

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"]) 

Und das ist, was ich Holen Sie sich beim Ausführen einer App mit groovy Config:

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, [email protected]] 
    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) 

Was ist wirklich seltsam ist, dass die Ausgabe tatsächlich wie in der Konfigurationsdatei angegeben formatiert ist - d. h. die erste Zeichenfolge verwendet das "consoleSolace" -Muster und die zweite Zeichenfolge das "consoleMain" -Muster, sodass die Datei irgendwie verwendet und interpretiert wird.

Version (von Abhängigkeitsbaum Plugin) verwendet:

[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 

Alle Ideen, was dieses Verhalten verursacht? Das ist genau, wie appender in logback.groovy, entsprechend http://logback.qos.ch/manual/groovy.html

Antwort

0

erklärt werden sollte, da ich ein anderes Problem reparierte, verursacht durch Gurke, ich habe mich entschieden zu überprüfen, ob es hier hilft. Und es tut es.

Das ist, weil diese .groovy Datei in Cucumber Launch Config geklebt wurde und Cucumber scheint zu versuchen, alle gefundenen .groovy Dateien auszuführen. Nachdem ich Kleben in Launcher geändert habe, um nur auf Feature-Dateien zu zeigen, verschwand dieser Fehler