与JAR加载log4j.properties [复制](Load log4j.properties

2019-08-01 04:18发布

这个问题已经在这里有一个答案:

  • 应该log4.properties在类路径? 6个回答

我有以下清单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.

谢谢

解决方案:改变了我的classhpath在清单本

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

Answer 1:

你也可以用参数启动JVM:

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

指定您的外部日志属性的任意位置。 我这个在一个特定的项目中使用了很多。



Answer 2:

属性文件没有按”走在类路径中,你必须给它,如图所示,从代码中调用它在这里 。

编辑:有了您的目录结构,你这样称呼它:

PropertyConfigurator.configure("log4j.properties");

EDIT2:

此外,还必须为它提供附加器:

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

如果您想对日志记录更精细的控制,删除第一行(根looger),并放在哪里,而不是[记录器名称]你把最上面的包让所有人都认为包里面的类可以使用记录的第二个。

您可以定义多个追加程序,并将它们分配到以这种方式不同的班级。



Answer 3:

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

或者你可以尝试把外面和给予适当的路径getResourceAsStream("resources/log4j.properties")方法



文章来源: Load log4j.properties with JAR [duplicate]
标签: java jar log4j