使用mvn exec:java时忽略log4j.properties

时间:2016-04-13 21:25:35

标签: java maven logging log4j slf4j

我正在使用mvn exec:java -Dexec.mainClass=my.Class在命令行上运行。程序运行时,我有一些调试输出,我想记录。

我使用private static Logger logger = LoggerFactory.getLogger("mylogger");来初始化记录器。我在log4j.properties中配置了这个:

log4j.appender.mylogger=org.apache.log4j.DailyRollingFileAppender
log4j.appender.mylogger.Threshold=DEBUG
log4j.appender.mylogger.File=logs/mylogger.log
log4j.appender.mylogger.DatePattern=.yyyy-MM
log4j.appender.mylogger.layout=org.apache.log4j.PatternLayout
log4j.appender.mylogger.layout.ConversionPattern=%d{ISO8601} [%5p] %C{1}:%L - %m%n
log4j.additivity.mylogger=false

但是,logger具有类org.slf4j.impl.JDK14LoggerAdapter并且似​​乎忽略了log4j.properties中的所有设置 - 它正在使用本地化警告和信息记录到STDERR。

我的相关maven依赖项:

<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
  <type>jar</type>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.21</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.21</version>
</dependency>

使用mvn exec:java时如何获取自定义配置记录器?当使用Jetty运行Spring应用程序的其余部分时,我的log4j.properties配置工作正常。

2 个答案:

答案 0 :(得分:1)

JDK14LoggerAdapter是slf4j-jdk14-1.7.21.jar的一部分。所以我的猜测是你的classpath包含这个jar。

作为mvn exec:java和jetty使用不同的类加载器,你只对幸运的是他更喜欢slf4j-log4j12而不是jdk14绑定。

另外,请确保exec:java includePluginDependencies 未设置为true(默认情况下为false)http://www.mojohaus.org/exec-maven-plugin/java-mojo.html

如果在删除令人反感的jar后你的命令行仍然想要选择log4.properties文件。即在控制台中键入以下错误:

log4j:WARN No appenders could be found for logger (dao.hsqlmanager).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

您可以提供属性文件的路径,将文件属性 log4j.configuration 传递给mvn exec:java

How to pass systemProperties when invoking exec:java plugin in maven?

答案 1 :(得分:1)

确保pom.xml中的 includePluginDependencies 也设置为 false

<configuration>
  <executable>maven</executable>
  <includePluginDependencies>false</includePluginDependencies>
</configuration>

删除slf4j-api的依赖关系

<!--
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.21</version>
</dependency>
-->

来自pom.xml。

如果有效,则在调用mvn exec:java时无需添加-Dlog4j.configuration。