web-dev-qa-db-ja.com

外部log4j.xmlファイル

私は、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

41
javamonkey79

-jarスイッチを使用して実行可能なjarファイルを起動すると、jarファイルのマニフェストからクラスパスが取得されます。 -cpスイッチが指定されている場合、無視されます。

Jeff Storeyの答え が最も簡単な解決策になります。または、jarファイルの manifestClass-Path属性を追加できます。

[〜#〜] edit [〜#〜]log4jデバッグを有効にして、log4j.xmlへのパスを完全修飾URLにしてみてください。例えば:

Java -Dlog4j.debug -Dlog4j.configuration=file:/path/to/log4j.xml -jar ...
52
Jason Day

これは動作します:

Java -jar -Dlog4j.configuration="file:d:\log4j.xml" myjar.jar
17
tibi

Log4j2の場合、configurationFileオプションを使用します。

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

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

13
r00tGER

やってみました Java -Dlog4j.configuration=/path/to/log4j.xml -jar <rest-of-args>

8
Jeff Storey

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

    }
}
6
Koray Güclü

SunのJDKおよび自動構成でlog4jを使用すると問題が発生しました。

これを使用できます:

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

ロガーを使用する前に。

1
VlatkoB

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を設定する)を参照してください。

0
Dayong

`` log4j2is using thestatic block settinglog4j.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ファイルが検索されます。

0
another

「-jar」は実行可能jar内のクラスパスのみを使用し、-cpは無視されます。 「。」を追加実行可能jarのクラスパスに、log4j.xmlが存在することを許可する必要があります。