log4j.properties 使用 mvn exec:java 时被忽略
log4j.properties ignored when using mvn exec:java
我在命令行上使用 mvn exec:java -Dexec.mainClass=my.Class
到 运行。虽然程序是 运行ning,但我有一些调试输出,我想记录下来。
我使用 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
有 class 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 配置工作正常。
JDK14LoggerAdapter 是 slf4j-jdk14-1.7 的一部分。21.jar。所以我猜你的 classpath 包含这个 jar。
由于 mvn exec:java 和 jetty 使用不同的 class 加载器,你很幸运,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?
确保 includePluginDependencies 在 pom.xml:
中也设置为 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
我在命令行上使用 mvn exec:java -Dexec.mainClass=my.Class
到 运行。虽然程序是 运行ning,但我有一些调试输出,我想记录下来。
我使用 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
有 class 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 配置工作正常。
JDK14LoggerAdapter 是 slf4j-jdk14-1.7 的一部分。21.jar。所以我猜你的 classpath 包含这个 jar。
由于 mvn exec:java 和 jetty 使用不同的 class 加载器,你很幸运,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?
确保 includePluginDependencies 在 pom.xml:
中也设置为 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