私は、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の答え が最も簡単な解決策になります。または、jarファイルの manifest にClass-Path
属性を追加できます。
[〜#〜] edit [〜#〜]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);
ロガーを使用する前に。
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を設定する)を参照してください。
`` log4j2is using the
static block 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ファイルが検索されます。
「-jar」は実行可能jar内のクラスパスのみを使用し、-cpは無視されます。 「。」を追加実行可能jarのクラスパスに、log4j.xmlが存在することを許可する必要があります。