2013-11-26 11 views
12

लोड करने में विफल रहता है मैंने कस्टम लॉगबैक एपेंडर बनाया है। लेकिन प्ले एपेंडर के लिए क्लास नॉटफाउंड अपवाद देता है।Play कस्टम लॉग बैक एपेंडर

बाद

मेरी appender

package log 

import ch.qos.logback.core.AppenderBase 
import ch.qos.logback.core.UnsynchronizedAppenderBase 
import ch.qos.logback.core.spi.ContextAwareBase 
import log.model.LogMessage 
import data.OrganizationDao 
import log.dao.LogDao 
import ch.qos.logback.core.status.Status 

class MongoAppender extends ContextAwareBase { 
    private def add(level:Int, msg: String, ex: Throwable) = { 
    val message = ex match { 
     case null => LogMessage(None, level, msg, null, null, new Array[String](0)) 
     case _ => LogMessage(None, level, msg, ex.getClass().getName(), ex.getMessage(), new Array[String](0)) 
    } 

    LogDao.save(message) 

    } 
    override def addStatus(status:Status) = { 
    add(status.getLevel(), status.getMessage(), status.getThrowable()) 
    } 

} 

मेरी logger.xml

<configuration> 

    <conversionRule conversionWord="coloredLevel" 
     converterClass="play.api.Logger$ColoredLevel" /> 

    <appender name="Mongo" class="log.MongoAppender"> 

    </appender> 



    <logger name="play" level="INFO" /> 
    <logger name="application" level="INFO" /> 

    <root level="ERROR"> 
     <appender-ref ref="Mongo" /> 
    </root> 

</configuration> 

मैं निम्नलिखित स्टैकट्रेस

Caused by: java.lang.ClassNotFoundException: log.MongoAppender 
     at  at java.net.URLClassLoader$1.run(Unknown Source) 
     at  at java.net.URLClassLoader$1.run(Unknown Source) 
     at  at java.security.AccessController.doPrivileged(Native Method) 
     at  at java.net.URLClassLoader.findClass(Unknown Source) 
     at  at java.lang.ClassLoader.loadClass(Unknown Source) 
     at  at java.lang.ClassLoader.loadClass(Unknown Source) 
     at  at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameA 
ndParameter(OptionHelper.java:60) 

मैं जाँच की है कि appender वर्ग करता है हो रही है निम्नलिखित है संकलित और संकलित बाइट कोड भी चेक किया। इसे क्यों नहीं खेलता है?

+0

मेरे लिए एक ही समस्या ... – Antonin

उत्तर

9

ऐसा लगता है कि देव मोड में नाटक की गतिशील रूप से संकलित कक्षाएं लॉगबैक के लिए उपलब्ध नहीं हैं। मैं एक ही मुद्दे से जूझ रहा हूं। मेरे कस्टम एपेंडर को एक अलग जार फ़ाइल में रखना मेरे लिए काम करता है। मैं चरणबद्ध अंतिम जार फ़ाइलों के साथ प्रोड में मानता हूं कि यह कोई समस्या नहीं होनी चाहिए।

+0

धन्यवाद agabor, तब जाने का रास्ता प्रतीत होता है? क्या आप ऐसा करने के बारे में कुछ विवरण दे सकते हैं, कृपया? – Antonin

+0

मूल विचार यह है कि आप अपने कस्टम लॉगर के लिए स्टैंड-अलोन प्रोजेक्ट बनाते हैं और इसे अपने Play प्रोजेक्ट में निर्भरता के रूप में उपयोग करते हैं। चूंकि यह एक पुराना मुद्दा है, मुझे यकीन नहीं है कि यह अभी भी नवीनतम प्ले संस्करणों में एक समस्या है। यहां तक ​​कि अगर यह एक और कामकाज हो सकता है। – agabor

+0

धन्यवाद agabor, मैं कोशिश करूँगा। यह अभी भी खेल के मौजूदा संस्करणों (2.5.एक्स) के साथ एक मुद्दा है – Antonin

1

हालांकि एक अलग जार फ़ाइल काम जोड़ने का समाधान, मुझे एक और समाधान मिला जो आपकी यूरी को आपके application.conf फ़ाइल में परिभाषित करने का लाभ जोड़ता है।

अपने मॉड्यूल में एक EagerSingleton बनाएँ। इसे स्टार्टअप के दौरान बुलाया जाएगा। इसके अंदर, अपने मोंगोडीबी एपेंडर का निर्माण करें और इसे उस लॉगर में जोड़ें जिसे आप MongoDB पर लॉग करना चाहते हैं। लाभ यह है कि आप इस कॉन्फ़िगरेशन में अपने कॉन्फ़िगरेशन को इंजेक्ट कर सकते हैं और फिर अपने मोंगोडीबी एपेंडर को पास करने के लिए कॉन्फ़िगरेशन सेटिंग्स तक पहुंच सकते हैं।

संबंधित मुद्दे