2011-12-14 84 views
1

我們正在爲我們的應用程序編寫一個自定義log4j appender。 appender應該將其事件記錄到數據庫中。現在我遇到的問題是建立數據庫連接。我們的jdbc設置位於一個名爲jdbc.properties的文件中,它位於WEB-INF文件夾的正下方。從log4j appender的WEB-INF文件夾加載屬性文件

我試圖訪問屬性文件中使用下面的代碼

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

...但在被空流的結果。任何想法如何從WEB-INF文件夾中加載屬性文件到log4j appender 沒有將屬性文件移動到另一個位置?

+0

我認爲這將在WEB-INF/classes目錄中查找屬性文件。一個類似的問題:http://stackoverflow.com/questions/1108434/howto-load-a-resource-from-web-inf-directory-of-a-web-archive – Manish 2011-12-14 08:29:29

+0

我知道,因此有關不移動文件。 – 2011-12-14 08:40:12

+0

問題是,例如,當服務器啓動時使用appender,所以沒有會話,也沒有綁定到應用程序。 – 2011-12-14 08:53:59

回答

1

可能是你可以試試,

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

你應該能夠通過ServletContext中獲取文件。即:

ServletContext ctx = ... 
InputStream stream = ctx.getResourceAsStream("/WEB-INF/jdbc.properties"); 

好吧,剛纔看到,你沒有訪問ServletContext - 忘記答案。

難道可以將jdbc連接的信息添加到log4j.properties中嗎?你爲什麼把這兩個分開?