log4j for jar不会读取配置文件

时间:2014-02-06 20:46:33

标签: java log4j2

我一直试图让log4j-2.0-b9与jar一起工作但却无法使用。我希望.jar之外的属性文件与.jar文件位于同一目录中,但log4j似乎没有提取它并默认在控制台上打印。我的配置文件如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
                 xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n"/>
  </layout>
</appender>

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
  <param name="append" value="false"/>
  <param name="file" value="C:\Users\abhishek\workspace\log4jtest\log.log"/>
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
  </layout>
</appender>

 <root>
  <level value="ALL"/>

  <appender-ref ref="fileAppender"/>
 </root>

</log4j:configuration>

我的JAVA代码如下:

package com.test;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Test {

private static Logger logger = LogManager.getLogger(Test.class);

public static void main(String[] args) {
    logger.error("Test error");
}
}

感谢。

3 个答案:

答案 0 :(得分:1)

log4j配置文件需要位于要查看的类路径中。如果你是从jar运行java,那那个jar文件就是你的类路径,所以log4j配置必须在那个jar中。

如果您不想这样做,也许您可​​以将“Class-Path”标头添加到jar文件的清单中。我自己没有尝试过,但它描述了here

答案 1 :(得分:1)

问题中的配置使用log4j-1.2格式。 Log4j-2.0使用不同的XML格式。配置文件也应该调用log4j2.xml而不是log4j.xml。最简单的配置方法是将log4j2.xml文件放在类路径中。

在线文档有许多示例配置:例如File AppenderConsole

请注意,类路径中需要两者 log4j-api-2.0和log4j-core-2.0 jar文件。

答案 2 :(得分:1)

我写了一篇关于迁移的帖子,它可能有帮助

http://mariemjabloun.blogspot.com/2014/09/log4j-2-tutorial-solve-error.html