Java Jar无法找到使用manifest.mf配置的log4j配置文件
我想读取log4j.xml文件,它位于etc文件夹内的jar之外。所以我创建了清单文件,如下所示Java Jar无法找到使用manifest.mf配置的log4j配置文件,java,jar,log4j,executable-jar,Java,Jar,Log4j,Executable Jar,我想读取log4j.xml文件,它位于etc文件夹内的jar之外。所以我创建了清单文件,如下所示 Manifest-Version: 1.0 Ant-Version: Apache Ant 1.8.2 Created-By: 1.6.0_24-b07 (Sun Microsystems Inc.) Built-By: Administrator Main-Class: com.him.LogPrinter Class-Path: ./lib/log4j.jar ./etc/log4j.xml
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_24-b07 (Sun Microsystems Inc.)
Built-By: Administrator
Main-Class: com.him.LogPrinter
Class-Path: ./lib/log4j.jar ./etc/log4j.xml
package com.him;
import org.apache.log4j.Logger;
public class LogPrinter {
/**
* @param args
*/
public static Logger logger = Logger.getLogger(LogPrinter.class);
public static void main(String[] args) {
logger.debug("I am a debug message");
logger.info("i am a info message");
logger.error("i am a error message");
logger.warn("i am a warn message");
System.out.println("hello");
}
}
我的班级档案如下
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_24-b07 (Sun Microsystems Inc.)
Built-By: Administrator
Main-Class: com.him.LogPrinter
Class-Path: ./lib/log4j.jar ./etc/log4j.xml
package com.him;
import org.apache.log4j.Logger;
public class LogPrinter {
/**
* @param args
*/
public static Logger logger = Logger.getLogger(LogPrinter.class);
public static void main(String[] args) {
logger.debug("I am a debug message");
logger.info("i am a info message");
logger.error("i am a error message");
logger.warn("i am a warn message");
System.out.println("hello");
}
}
当我使用
java -jar myapp.jar
它显示了一个常见的异常,即找不到记录器的追加器,也没有生成日志文件
当我将log4.xml文件放在jar文件中时,它会给出所需的输出
请帮助我,我无法理解为什么配置文件未被拾取,即使它位于使用manifest.mf文件配置的类路径中。
提前感谢。Log4J正在类路径的根目录中查找Log4J.xml文件。这意味着您应该将它从现在所在的
etc
文件夹上移一级,并修复清单文件。我相信您实际上根本不必在清单中提到log4j.xml。把它装进你的罐子里 您需要指定目录,而不是文件;就像普通的类路径一样
不过,我不确定我是否喜欢这个想法;我认为在命令行上提供一个配置文件路径会更方便。除此之外,我不会这样做,您需要指定目录,而不是文件,就像常规类路径一样。感谢@DaveNewton,它工作了(指定目录,而不是文件)移动到另一个解决方案中。