21

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

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

log4j をショートサーキットして、サードパーティの jar ファイルの log4j.properties ファイルを無視し、独自のファイルを使用するにはどうすればよいですか?

4

3 に答える 3

16

log4j.properties をオーバーライドする方法はいくつかあります。そのうちの 1 つを次に示します。

  • log4j.xml を使用して、拡張子を確認してください

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

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

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

于 2010-11-23T17:40:23.947 に答える