2013-02-11 22 views
5

Próbuję użyć pliku konfiguracyjnego XML dla Log4j2, który jest osadzony w mojej aplikacji Java, ale nie działa.Błąd Log4j2 przy ładowaniu pliku konfiguracyjnego XML

Kod:

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

Błąd:

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)

Odpowiedz

2

Nie trzeba używać ConfigurationFactory podczas korzystania z pliku XML konfiguracji. Upewnij się, że plik XML jest poprawnie skonfigurowany.

Nazwa pliku musi być log4j2.xml

Plik musi mi dodany do ścieżki klasy.

Uzyskaj logger z poprawną nazwą w swojej aplikacji, taką samą, jak ta, której użyto do skonfigurowania rejestratora w pliku xml, z numerem look here.

+0

Dodanie pliku do ścieżki klas nie zawsze jest "łatwe", np. jeśli utworzysz aplikację na komputerze z javapackager, otrzymasz np. plik .exe uruchamiający aplikację. W przypadku "normalnych" programów java uruchamianych z "java -jar" jest to łatwiejsze (również w tych przypadkach konfiguracja rejestratora zwykle znajduje się w folderze obok słoika, w którym to przypadku manifest słoika może opisywać ścieżkę klasy. javapackager utworzony instalator instaluje się do plików programu, nie można edytować tego pliku log4j conf, chyba że jesteś administratorem) –

2

miał ten sam problem, rozwiązać go tak:

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

} 

obecnie używam log4j2 beta 9 z databaseAppenderem do pisania do ora db.

0

Najkrótsza droga (bez stworzenia fabryki, źródła lub obiektów URL):

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

Działa to nawet, jeśli plik konfiguracyjny nie jest nazwany "log4j2 *".

Powiązane problemy