6

我正在尝试为嵌入在我的 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);

错误:

线程“主”java.lang.ClassCastException 中的异常:org.apache.logging.log4j.core.config.XMLConfiguration 无法在 in.gunbound.prelauncher.server 中转换为 org.apache.logging.log4j.core.config.ConfigurationFactory .Main.main(Main.java:62)

4

4 回答 4

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);
于 2013-04-06T14:34:38.923 回答
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;
    }

}

我目前正在使用带有 databaseAppender 的 log4j2 beta 9 来写入 ora db。

于 2013-09-19T08:14:31.333 回答
2

ConfigurationFactory使用 XML 配置文件时不需要使用。只需确保您的 XML 文件设置正确。

文件名必须是log4j2.xml

我必须将该文件添加到类路径中。

在您的应用程序中获取具有正确名称的记录器,与您在 xml 文件中设置记录器时使用的名称相同,看看这里

于 2013-03-09T10:14:22.860 回答
1

最短方式(不创建工厂、源或 url 对象):

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

即使配置文件未命名为“log4j2.*”,这也有效。

于 2018-01-10T19:55:04.113 回答