我有一个包含以下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
Run Code Online (Sandbox Code Playgroud)
我按如下方式运行课程
java -jar test.jar
Run Code Online (Sandbox Code Playgroud)
这是我的文件夹
lib
log4j.properties
test.jar
Run Code Online (Sandbox Code Playgroud)
为什么我看不到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.
Run Code Online (Sandbox Code Playgroud)
谢谢
解决方案:将MANIFEST中的classhpath更改为此
Class-Path: . lib/log4j-1.2.17.jar
Run Code Online (Sandbox Code Playgroud)
Les*_*ess 14
您还可以使用参数启动JVM:
-Dlog4j.configuration=file:"./your/properties/path/log4j.properties"
Run Code Online (Sandbox Code Playgroud)
指定外部日志属性的任意位置.我在一个特定的项目中经常使用它.
lin*_*ski 10
属性文件没有按"走在类路径中,你必须给它,如图所示,从代码中调用它在这里.
编辑:使用您的目录结构,您可以这样调用它:
PropertyConfigurator.configure("log4j.properties");
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果你想要更好地控制日志记录,删除第一行(root looger)并将第二行放在where而不是[logger-name]放置最顶层的包,以便该包中的所有类都可以使用日志记录.
您可以定义多个appender并以这种方式将它们分配给不同的类.