我有以下代码:
try {
DOMConfigurator.configure(url+log4j.xml);
} catch(Exception e) {
e.printStackTrace();
}
如果log4j.xml不存在,我希望FileNotFoundException
,然后执行catch-block。
但是当文件不存在时我没有看到异常,为什么会这样?
答案 0 :(得分:2)
如果你看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);
}
要解决此问题,您可以预先检查文件是否存在。
答案 1 :(得分:0)
尝试捕获Throwable而不是Exception并执行打印堆栈跟踪。这样您就可以捕获任何错误或异常,并相应地更改您的代码。
答案 2 :(得分:0)
如果要从log4j禁用这些消息,可以在安静模式下设置log4j:
LogLog.setQuietMode(true);