使用JAR 加载log4j.properties

我有一个包含以下Manifest的jar文件

Manifest-Version: 1.0 Created-By: 1.7.0_07 (Oracle Corporation) Main-Class: test.Main Class-Path: ./log4j.properties lib/log4j-1.2.17.jar 

我按如下方式运行课程

 java -jar test.jar 

这是我的文件夹

 lib log4j.properties test.jar 

为什么我看不到log4j属性文件? 这就是我所看到的

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

谢谢

解决方案:将MANIFEST中的classhpath更改为此

 Class-Path: . lib/log4j-1.2.17.jar 

您还可以使用参数启动JVM:

 -Dlog4j.configuration=file:"./your/properties/path/log4j.properties" 

指定外部日志属性的任意位置。 我在一个特定项目中经常使用它。

属性文件没有进入类路径,你必须提供它并从代码中调用它,如下所示。

编辑:使用您的目录结构,您可以这样调用它:

 PropertyConfigurator.configure("log4j.properties"); 

EDIT2:

此外,您必须为它提供appender:

 log4j.rootLogger=DEBUG, Appender1 log4j.logger.[logger-name]=level, Appender1 log4j.appender.Appender1=org.apache.log4j.ConsoleAppender log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout log4j.appender.Appender1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

如果你想更好地控制日志记录,删除第一行(root looger)并将第二行放在where而不是[logger-name],你放置最顶层的包,以便该包中的所有类都可以使用日志记录。

您可以定义多个appender并以这种方式将它们分配给不同的类。

PropertyConfigurator.configure(ABC.class.getResourceAsStream("log4j.properties"))工作正常,但基本上你需要将Log4j属性文件放在源代码文件夹(Java类旁边)中。

或者您可以尝试放在外面并在getResourceAsStream("resources/log4j.properties")方法中给出正确的路径