2013-02-11 36 views
5

मैं अपने जावा एप्लिकेशन में एम्बेडेड Log4j2 के लिए एक XML कॉन्फ़िगरेशन फ़ाइल का उपयोग करने का प्रयास कर रहा हूं, लेकिन काम नहीं कर रहा है।लोड एक्सएमएल कॉन्फ़िगरेशन फ़ाइल पर लॉग 4j2 त्रुटि

कोड:

ConfigurationSource source = new ConfigurationSource(Main.class.getResourceAsStream("/in/gunbound/prelauncher/server/log4j2/log4j2.xml")); 
ConfigurationFactory factory = (ConfigurationFactory) XMLConfigurationFactory.getInstance().getConfiguration(source); 
ConfigurationFactory.setConfigurationFactory(factory); 

त्रुटि:

Exception in thread "main" java.lang.ClassCastException: org.apache.logging.log4j.core.config.XMLConfiguration cannot be cast to org.apache.logging.log4j.core.config.ConfigurationFactory at in.gunbound.prelauncher.server.Main.main(Main.java:62)

उत्तर

2

आप ConfigurationFactory उपयोग करने के लिए आप एक एक्सएमएल-विन्यास फ़ाइल का उपयोग जब जरूरत नहीं है। बस सुनिश्चित करें कि आपकी एक्सएमएल फ़ाइल सही तरीके से सेटअप है।

फ़ाइल का नाम होना चाहिए log4j2.xml

फ़ाइल मुझे क्लासपाथ को जोड़ा जाना चाहिए।

अपने आवेदक में सही नाम के साथ लॉगर प्राप्त करें, वही नाम जिसका उपयोग आपने अपने एक्सएमएल-फाइल में लॉगर सेट करने के लिए किया था, look here है।

+0

क्लासपाथ में फ़ाइल जोड़ना हमेशा "आसान" नहीं होता है, उदा। यदि आप javapackager के साथ डेस्कटॉप एप्लिकेशन बनाते हैं, तो आप उदा। एक .exe फ़ाइल जो अनुप्रयोग शुरू करती है। 'जावा -जर' के साथ शुरू होने वाले "सामान्य" जावा कार्यक्रमों के लिए यह आसान है (उन मामलों में भी लॉगर कॉन्फ़िगरेशन आमतौर पर जार के बगल में एक फ़ोल्डर में होता है, जिस स्थिति में जार मैनिफेस्ट क्लासपाथ का वर्णन कर सकता है। लेकिन अगर javapackager ने प्रोग्राम फ़ाइलों को इंस्टॉलर इंस्टॉल किया है, आप उस log4j conf फ़ाइल को तब तक संपादित नहीं कर सकते जब तक कि आप व्यवस्थापक न हों) –

2

मुझे भी इसी तरह की समस्या थी। https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/FormatterLoggerManualExample.java

आपके मामले में यह इस तरह दिखना चाहिए:

URI configuration = Main.class.getResource("/in/gunbound/prelauncher/server/log4j2/log4j2.xml").toURI(); 
Configurator.initialize("config", null, configuration); 
2

, एक ही समस्या थी इस तरह इसे हल:

import java.io.InputStream; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 
import org.apache.logging.log4j.core.LoggerContext; 
import org.apache.logging.log4j.core.config.Configuration; 
import org.apache.logging.log4j.core.config.ConfigurationFactory.ConfigurationSource; 
import org.apache.logging.log4j.core.config.XMLConfigurationFactory; 

public class Log 
{ 

    private Logger logger; 

    public Log(String name) 
    { 
     InputStream is = Application.class.getResourceAsStream("log-config.xml"); 
     ConfigurationSource source = new ConfigurationSource(is); 
     Configuration config = XMLConfigurationFactory.getInstance().getConfiguration(source); 
     LoggerContext ctx = (LoggerContext) LogManager.getContext(true); 

     ctx.stop(); 
     ctx.start(config); 

     logger = ctx.getLogger(name); 
    } 

    public Logger getLog() 
    { 
     return logger; 
    } 

} 

मैं वर्तमान में उपयोग कर रहा हूँ यहाँ उदाहरण है कि मुझे मदद की है एक ora डीबी में लिखने के लिए डेटाबेस एपेंडर के साथ log4j2 बीटा 9।

0

सबसे छोटा रास्ता (कारखाने, स्रोत या url ऑब्जेक्ट के निर्माण के बिना):

Configurator.initialize("configName", "logging.xml"); 

यह भले ही विन्यास फाइल नाम नहीं है काम करता है "। Log4j2 *"।