2012-06-12 10 views
11

काम करता है मैं ग्रोवी डीएसएल का उपयोग कर लॉगबैक को कॉन्फ़िगर करना चाहता था। फ़ाइल बहुत सरल है:logback.groovy का उपयोग करने में असमर्थ, लेकिन logback.xml

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

मैं अपने आवेदन को बनाने और जेटटीरुन के साथ चलाने के लिए ग्रैडल का उपयोग करता हूं। मुझे निम्न त्रुटि मिलती है:

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 कॉन्फ़िगरेशन पर स्विच करता हूं, तो सब कुछ काम करता है। मैं क्या गलत कर रहा हूं?

लॉगबैक 1.0.0 का उपयोग करना। लॉगबैक 1.0.3 के साथ कोशिश की।

उत्तर

0

ग्रोवी कैस्टएक्सप्शन "कंसोल एपेंडर को एपेंडर के रूप में नहीं डाला जा सकता" में क्लास लोडर मुद्दे की सभी बीयरिंग हैं। ग्रोवी का कौन सा संस्करण यह है? क्या आप इस जारीकर्ता को पुन: उत्पन्न करने के लिए एक परीक्षण केस सहित bug report खोल सकते हैं?

+0

ठीक है, मैं एक नमूना प्रोजेक्ट तैयार करूंगा। मैं ग्रोवी 1.8.6 का उपयोग करता हूं। – Infeligo

+0

ग्रेट। बग रिपोर्ट के लिए तत्पर हैं। – Ceki

9

मैंने समाधान निकाला, लेकिन कुछ प्रश्न खोले गए। समस्या यह थी कि कक्षा वर्ग पर मेरे पास कोई उचित ग्रोवी नहीं था। मैंने इस बग को प्रदर्शित करने के लिए एक उदाहरण परियोजना बनाने का फैसला किया। मैंने ग्रैडल के "एप्लिकेशन" प्लगइन का उपयोग कर कंसोल एप्लिकेशन के साथ शुरुआत की। मैंने ग्रोवी को निर्भरता के रूप में शामिल नहीं किया था।

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" 

यह मैं एक त्रुटि है, जो काफी straighforward है दे दी है।

|-ERROR in ch.qos.logback.classic.LoggerContext[default] - Groovy classes are not available on the class path. ABORTING INITIALIZATION. 

ठीक है, ठंडा। निर्भरता गायब थी - ठीक करने में आसान। लेकिन जब मैंने अपना वेब एप्लिकेशन चलाया तो मुझे वही त्रुटि क्यों नहीं मिली? ग्रोवी निर्भरता को जोड़ने से वेब एप्लिकेशन में प्रारंभिक समस्या हल हो गई। मैंने अपनी परियोजना को तोड़ दिया और एक संबंधित जेरा बनायेगा। शायद, क्लासपाथ पहचान पर ग्रोवी काफी सही नहीं है।

0

सहकर्मियों।

मैं लगभग एक ही परेशानी का सामना करना पड़ा है आज:

  • जब मैं logback.xml सब कुछ काम करता है का उपयोग ठीक
  • जब मैं IntelliJ विचार eveything भी
  • ठीक काम करता है जब मैं logback.groovy का उपयोग जब शुरू में logback.groovy का उपयोग अपने कमांड लाइन से स्क्रिप्ट मुझे

:

जैसी कई त्रुटियां मिलीं
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)

@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') 
]) 
के साथ एक परेशानी को ठीक करता है कि
संबंधित मुद्दे