【问题标题】:Log4j2 error on load XML configuration file加载 XML 配置文件时出现 Log4j2 错误
【发布时间】:2013-02-11 03:24:04
【问题描述】:

我正在尝试使用嵌入在我的 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 不能强制转换 到 org.apache.logging.log4j.core.config.ConfigurationFactory 在 in.gunbound.prelauncher.server.Main.main(Main.java:62)

【问题讨论】:

    标签: java xml configuration load log4j2


    【解决方案1】:

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

    文件名必须是log4j2.xml

    我必须将文件添加到 classPath。

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

    【讨论】:

    • 将文件添加到类路径并不总是“容易”,例如如果你使用 javapackager 创建一个桌面应用程序,你会得到例如启动应用程序的 .exe 文件。对于以“java -jar”开头的“普通”java 程序,它更容易(在这些情况下,记录器配置通常位于 jar 旁边的文件夹中,在这种情况下,jar 清单可以描述类路径。但如果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);
    

    【讨论】:

      【解决方案3】:

      遇到了同样的问题,这样解决了:

      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。

      【讨论】:

        【解决方案4】:

        最短路径(无需创建工厂、源或 url 对象):

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-31
          • 2016-04-22
          • 2012-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多