如何在使用Eclipse创建的可运行jar中指定外部log4j2配置文件

杰登67

在Eclipse中运行项目时会创建日志,但是在创建可运行jar时(库处理选项:将所需的库提取到生成的JAR中),找不到配置文件,并且不会生成日志。

通过命令行运行jar时(cd进入包含可运行jar的目录中),将输出以下内容:

ERROR StatusLogger Unrecognized format specifier [d]
ERROR StatusLogger Unrecognized conversion specifier [d] starting at position 16 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [thread]
ERROR StatusLogger Unrecognized conversion specifier [thread] starting at position 25 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [level]
ERROR StatusLogger Unrecognized conversion specifier [level] starting at position 35 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [logger]
ERROR StatusLogger Unrecognized conversion specifier [logger] starting at position 47 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [msg]
ERROR StatusLogger Unrecognized conversion specifier [msg] starting at position 54 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [n]
ERROR StatusLogger Unrecognized conversion specifier [n] starting at position 56 in conversion pattern.
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

消息的最后一点告诉我,尽管配置文件正在从某个位置读取配置PatternLayout,但找不到该配置文件。将选项-Dlog4j.configurationFile选项添加到命令时,会发生以下异常(除了以前的错误消息):

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException: No Configuration was provided
        at java.util.Objects.requireNonNull(Unknown Source)
        at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java
:477)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:561)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:577)
        at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:212)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextF
actory.java:242)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextF
actory.java:45)
        at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
        at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:618)
        at test.SmokeTest.<clinit>(SmokeTest.java:41)

我尝试将-Dlog4j.configurationFile值指定为“ c:/path/to/config/log4j2.xml”和“ file:// c:/path/to/config/log4j2.xml”,并得到相同的错误。异常消息中的最后一行是记录器的初始化。在代码中,我尝试使用以下选项初始化记录器:

 - private static final Logger logger =
   LogManager.getLogger("c:/path/to/config/log4j2.xml");
 - private static final Logger logger = LogManager.getLogger("logger name specified in config file");

在写入文件之前,我设置了log4j.configurationFile系统属性。尝试了以下选项:

- System.setProperty("log4j.configurationFile", "C:\\path\\to\\config\\log4j2.xml")
- System.setProperty("log4j.configurationFile", "file://c:/path/to/config/log4j2.xml")

我还尝试了通过从原始log4j(log4j-1.2.17.jar)导入import org.apache.log4j.BasicConfigurator和PropertyConfigurator来使用BasicConfigurator.configure()和PropertyConfigurator.configure()方法。

考虑到log4j2可能无法从外部文件获取其配置,我将log4j2.xml文件的副本放在项目的src文件夹中。然后尝试使用以下命令初始化记录器:

- private static final Logger logger = LogManager.getLogger(MyClass.class.getName());
- private static final Logger logger = LogManager.getLogger(SmokeTest.class);

两者都给了我相同的错误,但是也许这就是为什么从Eclipse运行时它可以工作吗?

另外,如果我双击程序图标或在没有-Dlog4j.configurationFile选项的情况下从命令行运行,该应用程序将启动但不会生成日志。

请帮助我解决此问题,如果您需要我提供任何进一步的信息,请告诉我。我知道以前也曾问过类似的问题,但是我找不到适合我问题的解决方案。可运行的jar,Eclipse,外部log4j2配置文件。不使用Ant或Maven。

杰登67

我的问题是我在初始化日志之前先调用它。
一切都已正确打包,并且主类具有适用于log4j的代码。罪魁祸首是在main执行之前初始化的类级别对象。该对象的构造函数记录了其创建。在Eclipse中进行调试时,这不会导致任何错误,但会阻止可执行文件运行。
感谢@Andreas为我提供了从一个新项目重新开始的理想选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

以编程方式加载Log4j2配置文件

来自分类Dev

如何在Eclipse中执行可运行的jar文件

来自分类Dev

无法识别log4j2配置文件

来自分类Dev

使用单个log4j2 xml文件配置log4j2和log4j

来自分类Dev

如何用另一个log4j2配置文件覆盖一个log4j2配置文件?

来自分类Dev

如何在Java代码中指定log4j2的日志目录?

来自分类Dev

Log4j2找不到我的配置文件

来自分类Dev

找不到log4j2配置文件

来自分类Dev

LOG4J2:以编程方式配置时,禁用“找不到log4j2配置文件..”打印

来自分类Dev

YAML中用于log4j2的示例默认配置文件是什么?

来自分类Dev

找不到log4j2配置文件。使用默认配置:仅将错误记录到控制台

来自分类Dev

使用可执行JAR时指定Log4j2配置文件

来自分类Dev

自由配置文件配置问题(log4j2)

来自分类Dev

如何从JNDI加载log4j2配置文件

来自分类Dev

如何通过Spring Boot使用外部log4j.xml配置文件?

来自分类Dev

Spring配置文件,不同的Log4j2配置

来自分类Dev

log4j2.xml VM选项“未找到log4j2配置文件”

来自分类Dev

如何使用apache log4j2功能和log4j2配置文件写入CSV文件?

来自分类Dev

如何在ssh配置文件中指定RemoteForward?

来自分类Dev

Log4j2:如何在控制台日志中查找是否已找到日志配置文件

来自分类Dev

Spring Config Server查找中的log4j2配置文件不起作用

来自分类Dev

如何在ArangoDB docker映像中指定配置文件?

来自分类Dev

如何在log4j2中指定日志文件

来自分类Dev

找不到log4j2配置文件

来自分类Dev

如何在log4j2中配置StatisticsCsvLayout

来自分类Dev

如何使boxfuse创建包含要在主arg中指定的可执行jar和配置文件的映像?

来自分类Dev

Log4j2无法使用json配置文件

来自分类Dev

找不到log4j2配置文件

来自分类Dev

多久需要设置一次log4j2的配置文件?

Related 相关文章

  1. 1

    以编程方式加载Log4j2配置文件

  2. 2

    如何在Eclipse中执行可运行的jar文件

  3. 3

    无法识别log4j2配置文件

  4. 4

    使用单个log4j2 xml文件配置log4j2和log4j

  5. 5

    如何用另一个log4j2配置文件覆盖一个log4j2配置文件?

  6. 6

    如何在Java代码中指定log4j2的日志目录?

  7. 7

    Log4j2找不到我的配置文件

  8. 8

    找不到log4j2配置文件

  9. 9

    LOG4J2:以编程方式配置时,禁用“找不到log4j2配置文件..”打印

  10. 10

    YAML中用于log4j2的示例默认配置文件是什么?

  11. 11

    找不到log4j2配置文件。使用默认配置:仅将错误记录到控制台

  12. 12

    使用可执行JAR时指定Log4j2配置文件

  13. 13

    自由配置文件配置问题(log4j2)

  14. 14

    如何从JNDI加载log4j2配置文件

  15. 15

    如何通过Spring Boot使用外部log4j.xml配置文件?

  16. 16

    Spring配置文件,不同的Log4j2配置

  17. 17

    log4j2.xml VM选项“未找到log4j2配置文件”

  18. 18

    如何使用apache log4j2功能和log4j2配置文件写入CSV文件?

  19. 19

    如何在ssh配置文件中指定RemoteForward?

  20. 20

    Log4j2:如何在控制台日志中查找是否已找到日志配置文件

  21. 21

    Spring Config Server查找中的log4j2配置文件不起作用

  22. 22

    如何在ArangoDB docker映像中指定配置文件?

  23. 23

    如何在log4j2中指定日志文件

  24. 24

    找不到log4j2配置文件

  25. 25

    如何在log4j2中配置StatisticsCsvLayout

  26. 26

    如何使boxfuse创建包含要在主arg中指定的可执行jar和配置文件的映像?

  27. 27

    Log4j2无法使用json配置文件

  28. 28

    找不到log4j2配置文件

  29. 29

    多久需要设置一次log4j2的配置文件?

热门标签

归档