Exceção Exemplo #1
ApplicationException: Erro ao carregar configuracoes
at LeitorConfiguracoes.lerArq(LeitorConfiguracoes.java:404)
at DeamonAplicacao.iniciar(DeamonAplicacao.java:376)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
at LeitorConfiguracoes.parser(LeitorConfiguracoes.java:120)
at LeitorConfiguracoes.lerArq(LeitorConfiguracoes.java:386)
... 2 more
- Classe: ApplicationException
- Mensagem: Erro ao carregar configuracoes
- Stack Trace: desde LeitorConfiguracoes.lerArq, até java.lang.Thread.run
- Caused by: é a nova exceção a partir da linha "Caused by" (inclusive)
Veja o outro exemplo abaixo:
Exceção Exemplo #2
java.util.NoSuchElementException at LeitorConfiguracoes.parser(LeitorConfiguracoes.java:124) at LeitorConfiguracoes.lerArq(LeitorConfiguracoes.java:386) at DeamonAplicacao.iniciar(DeamonAplicacao.java:376) at java.lang.Thread.run(Thread.java:722)
- Classe: java.util.NoSuchElementException
- Mensagem: não tem (ela deveria estar na frente do nome da classe da exceção)
- Stack Trace: desde LeitorConfiguracoes.parser, até java.lang.Thread.run
- Caused by: não tem
catch (Exception e) { log.error(e.getMessage()); }
catch (Exception e) { throw new ApplicationException(e.getMessage()); }
17:52:37 [ERROR] Erro ao carregar configuracoes
Para a Exceção Exemplo #2, é muito pior. A exceção não tem mensagem. E apenas encontraríamos uma linha perdida no log com a seguinte aparência.
17:52:37 [ERROR] null
Então lembre-se:
- Em um log de erro, o primeiro parâmetro é uma mensagem, e o segundo parâmetro a exceção (com isso, todos os componentes da exceção são logados)
- Se for encapsular e lançar a nova exceção, em geral, existe um construtor da exceção onde o primeiro parâmetro é uma mensagem, e o segundo parâmetro é a exceção (parâmetro cause)
catch (Exception e) { log.error("Erro na operacao", e); }
Ou
catch (Exception e) { throw new ApplicationException("Erro na aplicacao", e); }
Nenhum comentário:
Postar um comentário