簡體   English   中英

外部log4j.xml文件

[英]External log4j.xml file

我試圖在jar外面的文件系統上運行帶有log4j.xml文件的jar,如下所示:

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(/ opt / 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

使用-jar開關啟動可執行jar文件時,將從jar文件的清單中獲取類路徑。 如果給出-cp開關,則忽略該開關。

Jeff Storey的答案將是最簡單的解決方案。 或者,您可以將一個Class-Path屬性添加到jar文件的清單中

編輯嘗試啟用log4j調試,並使log4j.xml的路徑成為完全限定的URL。 例如:

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

這工作:

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

對於log4j2,請使用configurationFile選項:

java -Dlog4j.configurationFile=/path/to/log4j2.xml -jar ...

http://logging.apache.org/log4j/2.0/manual/configuration.html

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

您可以在jar中定義默認屬性文件。 如果未定義自定義屬性,則可以使用此默認文件。如果定義了自定義屬性,則可以覆蓋默認屬性。

myjar.jar文件包含log4j.default.configuration

您可以使用此參數運行程序以啟動應用程序

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());

    }
}

我在使用Sun的JDK和自動配置的log4j時遇到了問題。

你可以用這個:

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

在使用Logger之前。

“-jar”僅使用可執行jar內的類路徑,並忽略-cp。 添加“。” 到可執行jar中的類路徑應該允許log4j.xml為fount。

java -cp“path / to / your / log4jxml:path / to / yourjar.jar”your.package.MainClass

目錄“path / to / your / log4jxml”中的log4j.xml將覆蓋“path / to / yourjar.jar”中的log4j.xml文件。

請參閱java classpath中的設置多個jar

``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時,它會在jar外面看到xml文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM