2011-12-14 5 views
1

私たちのアプリケーション用のカスタムlog4jアペンダーを作成しています。 appenderはそのイベントをデータベースに記録する必要があります。今私が持っている問題は、データベース接続を設定することです。私たちのjdbc設定は、WEB-INFフォルダの直下にあるjdbc.propertiesというファイルにあります。log4jアペンダーのWEB-INFフォルダーからプロパティファイルをロード

私は、次のコード

 
InputStream stream = Thread.currentThread().getContextClassLoader() 
        .getResourceAsStream("jdbc.properties"); 

を使用してファイルのプロパティにアクセスしようとした...しかし、ヌルであることにストリーム結果ました。任意のアイデアlog4jアペンダーのWEB-INFフォルダーからプロパティーファイルをロードする方法はありません。プロパティーファイルを別の場所に移動する必要はありませんか?

+0

これは、WEB-INF/classesディレクトリのプロパティファイルを探します。同様の質問:http://stackoverflow.com/questions/1108434/howto-load-a-resource-from-web-inf-directory-of-a-web-archive – Manish

+0

私は知っているので、ファイル。 –

+0

問題は、例えば、サーバーの起動時にアペンダーが使用されるため、セッションがなく、アプリケーションにバインドされていないということです。 –

答えて

1

は、あなたがあなたがたServletContextを経由してファイルを取得することができるはず、

String path =Thread.currentThread().getContextClassLoader().getResource("/").toURI().resolve("../jdbc.properties").getPath(); 
Properties ps=new Properties(); 
ps.load(new FileInputStream(path)); 
+0

アペンダーはAppenderSkeletonだけを拡張するフリースタンディングクラスであり、getServletContext()メソッドはありません。私は本当に静的変数にコンテキストを格納するServletContextListenerを作成する必要がありますか? –

+0

@KimL - 編集した投稿を見てください。それがあなたを助けることを願ってください。 – adatapost

+0

Hackishソリューションですが、機能します。 –

0

を試すことができますように。いいえ、ServletContextへのアクセス権がないことがわかりました。答えを忘れてください。

jdbc接続の情報をlog4j.propertiesに追加できませんか?なぜあなたは2つを分けていますか?

+0

アプリケーションの残りの部分がjdbc.propertiesファイルを使用しているためです。 2つの場所で同じ設定をしたくない。 –

関連する問題