2010-11-23 6 views
13

私のJavaアプリケーションは、log4jロギングを使用するサードパーティのjarファイルを参照します。問題は、このjarファイルにはlog4j.propertiesファイルが含まれているため、マシン上でアクセス拒否例外が発生しますが、jarファイルの内容を変更するための制御はありません。log4j.propertiesをオーバーライド

自分のアプリケーションのクラスパスに独自のlog4j.propertiesファイルを追加しようとしましたが、効果がないようです。 PropertyConfiguratorを使用してプログラムで独自の設定をインポートしようとすると、log4jはjarファイルのプロパティファイルを最初にロードするように見えます(例外が発生します)。

log4jを短絡して、サードパーティのjarファイルのlog4j.propertiesファイルを無視し、自分自身を使用するにはどうすればよいですか?

答えて

15

は、log4j.propertiesを上書きするには、いくつかの方法があり、そのうちの一つは、次のとおりです。

  • 使用のlog4j.xml 延長
を参照してください。

別のアプローチは、次のとおりです。

  • log4j.defaultInitOverrideシステムプロパティを他の値に設定する "false"を指定すると、log4jはデフォルトの初期化手順(この手順)をスキップします。
  • resource文字列変数をlog4j.configurationシステム・プロパティーの値に設定します。デフォルトの初期化ファイルを指定する好ましい方法は、log4j.configurationシステム・プロパティーを使用する方法です。システムプロパティlog4j.configurationが定義されていない場合は、文字列変数resourceをデフォルト値 "log4j.properties"に設定します。
  • リソース変数をURLに変換しようとしています。
  • MalformedURLExceptionなどの理由でリソース変数をURLに変換できない場合は、org.apache.log4j.helpers.Loader.getResource(resource、Logger.class)を呼び出してクラスパスからリソースを検索します。 URLを返します。文字列 "log4j.properties"が不正な形式のURLであることに注意してください。検索された場所のリストについては、Loader.getResource(java.lang.String)を参照してください。
  • URLが見つからない場合は、デフォルトの初期設定を中止してください。それ以外の場合は、URLからlog4jを設定します。 PropertyConfiguratorは、URLが ".xml"拡張子で終わらない限り、log4jを構成するためにURLを解析するために使用されます。この場合、DOMConfiguratorが使用されます。カスタムコンフィギュレータをオプションで指定できます。 log4j.configuratorClassシステム・プロパティーの値は、カスタム・コンフィギュレータの完全修飾クラス名とみなされます。指定するカスタムコンフィグレータは、コンフィグレータインターフェイスを実装する必要があります。

参考:http://logging.apache.org/log4j/1.2/manual.html

+0

URLはLog4jのの生活のバージョンの最後を指します。最も近いものは次のとおりです:https://logging.apache.org/log4j/2.x/manual/configuration.html#SystemProperties –

関連する問題