Eu sempre colocava dentro dos catch mais um amigo me deixou uma duvida, e me disse que isso deixava o sistema mais pesado em produção.
Obs : Estou usando em um container .
catch (EntityNotFoundException e) {
e.printStackTrace();
}
Abs.
Eu sempre colocava dentro dos catch mais um amigo me deixou uma duvida, e me disse que isso deixava o sistema mais pesado em produção.
Obs : Estou usando em um container .
catch (EntityNotFoundException e) {
e.printStackTrace();
}
Abs.
Bom, se pensar faz sentido.
esse método gera um texto relativamente grande se falando de log, e quanto mais texto, mais operações de IO, quanto mais operações de IO, mais pesado fica.
Agora se é perceptível eu não sei dizer, e eu só tiraria se conseguisse substituir por algo que me dê uma explicação tão boa quanto, sobre o que houve de errado e aonde.
Rodrigo Sasaki estas mensagens são impressas no console não salvas em Log.
Mas o console do servidor geralmente é salvo em arquivo
Não sabia disso não então tem sentido o que ele falou.
O problema não é saber se imprimir o stacktrace vai ter boa performance ou não. A questão realmente séria é que este tratamento de erros pode estar muito falho.
[code]catch (EntityNotFoundException e) {
e.printStackTrace();
}
// Continua execução como se nada tivesse acontecido.
[/code]
Você teria duas alternativas aqui:
catch (EntityNotFoundException e) {
/// Nada a fazer
/// É seguro ignorar esta exceção, ela é resultado de não encontrar registros na busca pelo objeto XYZ.
/// Mais à frente será feito tratamento para o caso de XYZ não cadastrado.
}
Desse jeito, apenas imprimindo o stack trace você não faz nem uma coisa nem outra. Nem trata o erro e nem afirma que a exceção é esperada!
E respondendo de maneira direta á pergunta: e.printStackTrace() deve sempre ser usado quando necessário, ou seja, quando houver a possibilidade de um problema que precise ser diagnosticado. E não deve ser usado quando não há nenhum erro. Ser pesado ou leve não influi nessa decisão.
Ah, complementando.
Em aplicações de produção é preferível imprimir o stacktrace usando o framework de log (seja qual for o que vocês estejam utilizando). Assim o erro vai para todos os lugares onde está configurado para ir, e não apenas para o system.out do servidor.
Geralmente os frameworks de log tem uma chamada tipo:
logger.error("Minha mensagem de erro", e);
Ao fazer assim o stacktrace do objeto “e” será impresso no log junto com a mensagem explicativa.
Boa gomesrod acho que esse é a solução mais viável mesmo.
Obrigado pelo esclarecimento.
Faço minhas as palavras do GomesRod.
Tratar exceções com seriedade é um passo extremamente importante para qualquer sistema sério.