我正在使用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配置工作正常。
答案 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。