Java Jar无法找到使用manifest.mf配置的log4j配置文件

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

我想读取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
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,它工作了(指定目录,而不是文件)移动到另一个解决方案中。