2009-05-17 7 views
13

私はlog4jでApache Commons LoggingとSLF4Jを使用していますが、log4j.propertiesをconf/log4.propertiesのようなカスタムの場所で使用したいと思っています。ここでの問題は、次のとおりです。カスタムプレイスのLog4jプロパティ

私は

PropertyConfigurator.configure("conf/log4j.properties"); 

を使用する場合は、私のアプリは、log4jのに縛られACLとSLF4Jを持つことの目的に反しています。

ログインプリメンテーションの内容をアプリなしで設定する最も良い方法は何ですか。

答えて

24

最も簡単なことは、log4j.configurationシステムプロパティを使用してファイルの場所を指定することです。 Log4J manualに例を採用:

java -Dlog4j.configuration=conf/log4j.properties -classpath ... 

私はLog4Jのは、どこでも、クラスパス上の「log4j.properties」という名前のファイルを見つけると確信していますが、幻覚することができます。しかし、努力する価値がある。

+9

実際にVM引数を指定して設定ファイルの場所を指定することができますが、あなたのソリューションは私のために動作しませんでした。私はlog4j.propertiesファイルの場所をURLスタイル形式(-Dlog4j.configuration = file:///my/conf/log4j.properties)で指定しなければなりませんでした。 – Haes

+1

Upvotes all round。 Windows 7マシン上のJBOSS 5.1 EAPの-Dlog4j.configuration = file:/C :/JBoss51/jboss-eap-5.1 /..../ log4j.propertiesファイルの後にスラッシュを1つだけ入れてくれました。 – CodeClimber

+0

@kdgregory ...どこでファイルの場所を指定するのですか?eclipseプロジェクトのRUN設定のVM引数にありますか?またはTomcatの設定ファイルですか? – MKod

3

PropertiesConfiguratorを呼び出すことで、あなたのアプリケーションをlog4jに結び付けていることになります。しかし、このネクタイの延長は非常に限られています。 PropertiesConfiguratorを呼び出す行を非常に簡単に削除し、コードを再コンパイルすることができます。その後、SLF4J APIをロギングに使用していると仮定して、log4jを別のロギング・フレームワーク、たとえばlogback-classicまたはj.u.lでrepalceできます。 jarファイルを置き換えるだけです。したがって、SLF4Jは依然として大きな目的を果たしています。私はお風呂の水で赤ちゃんを捨てるつもりはない。

1

私はOPと同じ問題を抱えていた、

-Dlog4j.configuration="file:/C:/workspace3/local/log4j.properties"