Но регистрируется ошибка один раз для случая ниже.
Это потому, что вы обрабатываете исключение:
Class1:
public void func() {
try{
new Class2.prop()
}catch(IOException ioe){
logger.log(2,ioe);
}
}
Класс 2:
public void prop() throws IOException {
try{
//error oocurs here
}catch(FileNotFoundException fe){
logger.log(2,fe);
throw fe;
}
// Here!!!!!
}
В вашем блоке перехвата class2 (после того, как вы здесь // обнаружили ошибку) вы регистрируете исключение, вот что вы получили в своих журналах.
Но поскольку вы просто регистрируете исключение, вы сообщаете программе, что исключение каким-то образом контролировалось или обрабатывалось (что более уместно), и программа продолжает свой поток до строки, где я добавил комментарий // Здесь !!!!!
Позже в классе 1, поскольку исключение было обработано, в вашем блоке try / catch ничего не происходит, и ваше второе исключение никогда не регистрируется (как вы ожидали), потому что оно никогда не происходило.
Если вы хотите увидеть два журнала (которые, я думаю, не нужны), вы должны повторно сгенерировать исключение, как я это сделал в вашем классе2 и плюс, измените сигнатуру метода, чтобы пометить, что он вызывает IOException.
Таким образом, у вас будет два бревна.
Лучше будет так:
Class1:
public void func() {
try{
new Class2.prop()
}catch(IOException ioe){
logger.log(2,ioe);
}
}
Class2:
public void prop() throws IOException {
//error oocurs here
}
В классе 2 вы не обрабатываете исключение, вы просто пропускаете его через вызывающего. В любом случае, в стековой трассе у вас будет информация.
Надеюсь, это поможет.