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

时间:2011-12-11 19:50:18

标签: java jar log4j executable-jar

我想阅读log4j.xml文件,该文件位于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");
}

}

当我使用

运行我的jar文件时
java -jar myapp.jar

它显示通常的例外情况是没有appender可以找到记录器并且没有生成日志文件。

当我将log4.xml文件放在jar文件中时,它会提供所需的输出。

请帮助我无法弄清楚为什么配置文件没有被选中,即使它是在使用manifest.mf文件配置的类路径中。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您需要指定目录,而不是文件;像普通的类路径一样。

但是,我不确定我是否喜欢这个想法;我认为在命令行上提供配置文件路径会更方便。

答案 1 :(得分:0)

Log4J正在将log4j.xml文件查找到类路径的根目录中。这意味着您应该将它从现在的etc文件夹向上移动一级,并修复您的清单文件。我相信你实际上根本不必提及清单中的log4j.xml。把它装进你的罐子里吧。