2013-02-11 5 views
5

Я пытаюсь использовать файл конфигурации XML для Log4j2, встроенный в мое приложение Java, но не работает.Ошибка log4j2 при загрузке файла конфигурации XML

Код:

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 при использовании файла XML-конфигурации. Просто убедитесь, что ваш XML-файл настроен правильно.

Имя файла должно быть log4j2.xml

Файл должен мне добавлен в CLASSPATH.

Получить регистратор с правильным именем в вашем приложении, с тем же именем, которое вы использовали для настройки регистратора в вашем XML-файле, есть look here.

+0

Добавление файла в путь к классам не всегда является «простым», например. если вы создаете настольное приложение с javapackager, вы получаете, например, файл .exe, который запускает приложение. Для «нормальных» java-программ, которые начинаются с «java -jar», это проще (также в таких случаях конфигурация регистратора обычно находится в папке рядом с банкой, и в этом случае манифест jar может описывать путь к классам. javapackager созданный установщик устанавливает в файлы программы, вы не можете редактировать этот файл журнала log4j, если вы не являетесь администратором) –

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

} 

настоящее время я использую log4j2 beta 9 с базой данныхAppender для записи в ora db.

0

Кратчайший путь (без создания фабрики, источника или объектов URL):

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

Это работает, даже если файл конфигурации не назван "log4j2 *".