我有以下代碼:使用DOMConfigurator時無法捕獲FileNotFoundException
try {
DOMConfigurator.configure(url+log4j.xml);
} catch(Exception e) {
e.printStackTrace();
}
如果log4j.xml不存在,我希望FileNotFoundException
,然後執行catch-block。
但是當文件不存在時我沒有看到異常,爲什麼會這樣?
我有以下代碼:使用DOMConfigurator時無法捕獲FileNotFoundException
try {
DOMConfigurator.configure(url+log4j.xml);
} catch(Exception e) {
e.printStackTrace();
}
如果log4j.xml不存在,我希望FileNotFoundException
,然後執行catch-block。
但是當文件不存在時我沒有看到異常,爲什麼會這樣?
如果你看看the source of DOMConfigurator.doConfigure它看起來像捕獲了Exception
然後只記錄錯誤而不是重新拋出它。因此FileNotFoundException
將不會回到您的調用代碼。
try {
...
} catch (Exception e) {
if (e instanceof InterruptedException || e instanceof InterruptedIOException) {
Thread.currentThread().interrupt();
}
// I know this is miserable...
LogLog.error("Could not parse "+ action.toString() + ".", e);
}
要解決此問題,您可以預先檢查文件是否存在。
好的,我會這麼做的。謝謝 – juanasecas 2010-10-19 12:45:25
嘗試捕捉Throwable而不是Exception並執行打印堆棧跟蹤。這樣你就可以捕獲任何錯誤或異常,並相應地更改你的代碼。
在要禁用從log4j的這些消息的情況下,你可以在安靜模式下設置的log4j:
LogLog.setQuietMode(true);
你的意思是FileNotFoundException異常小號拋出,而不是陷入catch塊? – 2010-10-19 10:18:10