2010-10-19 3 views
3

У меня есть следующий код:Не удается поймать FileNotFoundException при использовании DOMConfigurator

try { 
    DOMConfigurator.configure(url+log4j.xml); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

И я бы ожидать FileNotFoundException если log4j.xml не существует, а затем поймать-блок будет выполнен ,

Но я не вижу исключения, когда файл не существует, почему это так?

+0

вы имеете в виду FileNotFoundException s Метательное вместо того, чтобы быть пойманным в поймать блок? –

ответ

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); 
} 

Чтобы обойти это, вы можете предварительно проверить, существует ли файл самостоятельно.

+0

ОК, я сделаю это. благодаря – juanasecas

0

Попробуйте поймать Throwable вместо Exception и выполнить трассировку стека печати. Таким образом, вы можете поймать любые ошибки или исключения и соответствующим образом изменить свой код.

0

В случае, если вы хотите, чтобы отключить эти сообщения из log4j, вы можете установить log4j в скрытом режиме:

LogLog.setQuietMode(true);