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

使用mvn exec:java时忽略log4j.properties,java,maven,logging,log4j,slf4j,Java,Maven,Logging,Log4j,Slf4j,我正在使用mvn exec:java-Dexec.mainClass=my.Class在命令行上运行。程序运行时,我有一些调试输出,我想记录这些输出 我使用私有静态记录器Logger=LoggerFactory.getLogger(“mylogger”)以初始化记录器。我在log4j.properties中对其进行了如下配置: log4j.appender.mylogger=org.apache.log4j.DailyRollingFileAppender log4j.appender.mylo

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

我使用私有静态记录器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>

log4j
log4j
1.2.17
罐子
org.slf4j
slf4j api
1.7.21
org.slf4j
slf4j-log4j12
1.7.21

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

JDK14LoggerAdapter是slf4j-jdk14-1.7.21.jar的一部分。所以我猜您的类路径包含这个jar

由于mvn exec:java和jetty使用不同的类加载器,您只有幸运的是jetty更喜欢slf4j-log4j12而不是jdk14绑定

另外,确保exec:javaincludePluginDependencies未设置为true(默认为false)

如果在删除攻击性jar之后,您的命令行仍然需要选择log4.properties文件。i、 e.在控制台中键入以下错误:

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的属性文件的路径


JDK14LoggerAdapter是slf4j-jdk14-1.7.21.jar的一部分。所以我猜您的类路径包含这个jar

由于mvn exec:java和jetty使用不同的类加载器,您只有幸运的是jetty更喜欢slf4j-log4j12而不是jdk14绑定

另外,确保exec:javaincludePluginDependencies未设置为true(默认为false)

如果在删除攻击性jar之后,您的命令行仍然需要选择log4.properties文件。i、 e.在控制台中键入以下错误:

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的属性文件的路径


确保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。

确保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。

试试mvn dependency:tree,它很可能是可传递的。我在
META-INF/maven/plugin.xml
中的
exec maven plugin 1.4.0
中找到了罪魁祸首
slf4j-jdk14
,所以问题是,如何告诉
mvn exec:java
不要使用
slf4j-jdk14
?try includePluginDependencies=false没有帮助(默认情况下为false)。也许我应该降级execmaven插件,我知道它在升级之前是有效的。对不起,忽略我之前的评论。在我的pom.xml中,这是一个意外设置为true的值,因此我的命令行参数被覆盖,我认为它不起作用。现在它工作了!非常感谢你!试试mvn dependency:tree,它可能是传递的。我在
META-INF/maven/plugin.xml
中的
exec maven plugin 1.4.0
中找到了罪魁祸首
slf4j-jdk14
,所以问题是,我如何告诉
mvn exec:java
不要使用
slf4j-jdk14
?试试incluginDependencies=false没有帮助(默认为false)。也许我应该降级
exec maven plugin
,我知道它在升级之前就工作了。对不起,忽略我之前的评论。在我的pom.xml中,这是意外设置为true的,所以我的命令行参数被覆盖了,我认为它不工作。现在它工作了!非常感谢!