2010-04-07 96 views
36

我試圖運行與罐子外面的文件系統上的文件的log4j.xml像這樣一個jar:外部的log4j.xml文件

java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=log4j.xml argToJar1 argToJar2 

我也曾嘗試:

java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=/opt/companyName/pathToJar/log4j.xml argToJar1 argToJar2 

log4j.xml文件是文件在同一目錄中的jar(/選擇/的companyName/pathToJar /),但我仍然得到標準的警告消息:

log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle). 
log4j:WARN Please initialize the log4j system properly. 

是否有可能將配置文件放在jar外面,還是必須將它打包到jar中?

TIA

回答

46

當使用-jar開關啓動一個可執行的JAR文件,從JAR文件的清單中獲得的類路徑。該-cp開關,如果給定的,被忽略。

Jeff Storey's answer將是最簡單的解決方案。或者,你可以添加一個Class-Path屬性的jar文件的manifest

編輯 嘗試啓用log4j的調試,使得路徑log4j.xml一個完全合格的URL。例如:

java -Dlog4j.debug -Dlog4j.configuration=file:/path/to/log4j.xml -jar ... 
+0

前面我已將此添加到清單,它仍然沒有工作(但我不知道相對路徑是合法的): 類路徑: – javamonkey79 2010-04-07 18:31:36

+0

相對路徑有效。你使用的是什麼命令? – 2010-04-07 20:40:52

+0

java -Dlog4j.configuration =/path/to/log4j.xml -jar MyJarName.jar 或許是Class-Path:和'。'之間的空格。是責備。 – javamonkey79 2010-04-08 03:23:53

7

你試過java -Dlog4j.configuration=/path/to/log4j.xml -jar <rest-of-args>

+0

這沒有奏效。 – javamonkey79 2010-04-07 18:30:50

+2

需要的文件:在路徑 – 2013-09-09 19:50:37

0

「-jar」僅使用可執行jar內的類路徑,而-cp被忽略。添加「。」到可執行jar中的classpath應該允許log4j.xml。

15

這個工程:

java -jar -Dlog4j.configuration="file:d:\log4j.xml" myjar.jar 
1

我不得不使用Sun的JDK和自動配置log4j的問題。使用記錄儀之前

String filename = System.getProperty("log4j.configuration"); 
DOMConfigurator(filename); 

您可以使用此。

6

您可以定義默認屬性在JAR文件。如果沒有自定義屬性的定義,你可以使用這個默認的文件。如果定義可以覆蓋默認屬性自定義屬性。

myjar.jar文件包含log4j.default。配置

你可以用這個參數運行程序來啓動應用程序

java -jar -Dlog4j.configuration=log4j.properties target\yourfile-v01_000_01_c002.jar 

示例代碼

public static void main(String[] args) { 
    String filename = System.getProperty("log4j.configuration"); 
    if(null==filename||filename.trim().equals("")) { 
     logger.info("Using default log4j configuration log4j.default.properties."); 
     logger.info("If you would like to change the default configuration please add following param before startup -Dlog4j.configuration=<log4jfile>"); 
     PropertyConfigurator.configure(Main.class.getResourceAsStream("/log4j.default.properties")); 
    } else { 
     File file = new File(filename); 
     if(!file.exists()) System.out.println("It is not possible to load the given log4j properties file :"+file.getAbsolutePath()); 
     else PropertyConfigurator.configure(file.getAbsolutePath()); 

    } 
} 
+1

謝謝!這適用於.properties文件。如果使用.xml配置文件,則使用DOMConfigurator而不是PropertyConfigurator。 – 2016-07-11 14:11:16

0

java命令 「路徑/到/你/ log4jxml:路徑/到/ yourjar.jar」 your.package.MainClass

在目錄中的log4j.xml 「路徑/到/你/ log4jxml」 會覆蓋「path/to/yourjar.jar」中的log4j.xml文件。

請參考Setting multiple jars in java classpath

0

用於`的最簡單的路徑配置`log4j2 is using the靜塊setting log4j.configurationFile`:

public class MyClass { 

    static { 
     System.setProperty("log4j.configurationFile", "./config/log4j2.xml"); 
    } 

    protected final transient Logger logger = LogManager.getLogger(IDOLTracker.class); 

    public static void main(String[] args) { 
     logger.info(""); 
    } 
} 

然後,結構可以是如下:

ProgramFolder
| ----/config/log4j2.xml
| ---- MyClass.jar

當你運行你的jar時,它會在xml文件的jar外看起來。