2011-12-11 143 views
0

我想讀取位於etc文件夾內的jar外部的log4j.xml文件。所以我創建的清單文件如下Jar無法找到使用manifest.mf配置的log4j配置文件

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 

,也沒有任何附加器的通常的例外可能是我的jar文件找到記錄器並且沒有生成日誌文件。

當我將log4.xml文件放入jar文件時,它會提供所需的輸出。

請幫助我無法弄清楚爲什麼即使配置文件位於使用manifest.mf文件配置的類路徑中,配置文件也不會被選中。 在此先感謝。

+0

此外,我不會這樣做,你需要指定目錄,而不是文件,就像一個普通的類路徑。 –

+0

感謝@DaveNewton它的工作(指定目錄,而不是文件) – HKumar

+0

移動回答替代解決方案。 –

回答

1

您需要指定目錄,而不是文件;就像普通的類路徑一樣。

雖然我不確定我是否喜歡這個想法,我認爲在命令行上提供配置文件路徑會更方便。

0

Log4J正在尋找log4j.xml文件到類路徑的根目錄。這意味着您應該將其從現在的etc文件夾上移一級,並修復清單文件。我相信你實際上不必在manifest中提及log4j.xml。把它裝進你的罐子裏。

+1

我認爲重點是將配置外部化。 –