【发布时间】:2015-02-06 06:56:13
【问题描述】:
我正在开发一个使用 log4j2 日志记录的项目。 在 intellij 中开发时,一切正常,并且日志记录按预期完成。 log4j2.xml 通过在启动时通过 intellij 设置传递给 jvm 的 java 属性链接。 但是一旦我尝试运行一个独立的 gradle 构建的 fat-jar,我就会遇到以下问题:
java -Dlog4j.debug=true -Dlog4j.configurationFile=/home/aaa/log4j2.xml -jar /home/aaa/myjar-SNAPSHOT.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 No log4j2 configuration file found. Using default configuration: logging only errors to the console.
我什至不明白那些 [thread] 来自哪里,因为即使在我的 log4j2 中使用基本最简单的配置时,我也会遇到同样的错误:
<?xml version="1.0" encoding="UTF-8" ?><Configuration status="WARN" monitorInterval="86400">
<Appenders>
<Console name="console-log" target="SYSTEM_OUT">
<PatternLayout
pattern="%-5p %d{yyyy-MM-dd HH:mm:ss.SSS} ${hostName} %c{1} %msg %throwable{7}%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info" additivity="false">
<AppenderRef ref="console-log"/>
</Root>
</Loggers>
欢迎任何想法。谢谢。
【问题讨论】:
-
好的,问题是 log4j2-flume appender 在封装在 fatjar 中时不起作用(错误如上所示)。在标准的多 jar 类路径感知环境中一切正常。关于如何为胖子解决这个问题的任何想法?
-
有人找到解决方案了吗?
-
不,我们开始使用主 jar 和 jar 库,而不是该项目中的胖 jar。
标签: java logging log4j2 flume flume-ng