Logging e anti-pattern

Pessoal,

outro dia estava relendo a Mundo Java 20 e no artigo do Eduardo Guerra sobre camada de negócios, vem o seguinte:

Nunca havia ouvido falar nisso como anti-pattern e confesso que não entendi o motivo. Alguém tem alguma informação ou referência sobre isto?

Acho que existem mecanismos melhores para isso, sobretudo no caso de RuntimeException.

Eu, geralmente, registro um uncaughtExceptionHandler, que loga as exceções de runtime não pegas automaticamente. Veja a classe Thread para entender como registrar esse Handler.

As demais exceções, geralmente o ideal é fazer o tratamento mesmo. Seja se livrando da causa, ou jogando para a classe de cima. Se realmente ninguém puder tratar (o que acho muitíssimo raro), aí sim, o negócio é logar.

Finalmente, fazer isso vai encher seus arquivos de logs de exceções que podem muito bem ser tratadas pelas classes superiores e não constituir exatamente um problema na sua aplicação. Isso dificulta a analise dos arquivos de log gerados e, algo que era para ser para te ajudar, acaba se tornando inútil ou te atrapalhando.

Isso é apenas um anti-pattern se for feito nas camadas erradas da sua aplicação. Quase sempre você vai querer logar exceptions nas camadas de integração, onde elas vão provavelmente ser convertidas em algo mais útil, uma página de erro, por exemplo. Em um sistema web esta é a camada do controler, nas actions to teu sistema.

[quote=Rodrigo Manhães]Pessoal,

outro dia estava relendo a Mundo Java 20 e no artigo do Eduardo Guerra sobre camada de negócios, vem o seguinte:

Nunca havia ouvido falar nisso como anti-pattern e confesso que não entendi o motivo. Alguém tem alguma informação ou referência sobre isto?[/quote]

Uma boa referência sobre anti-patterns de tratamento de exceções: http://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html

Depende louds, as exceptions de negócio com certeza devem ser tratadas pelas actions, mas as de infraestrutura não fazem muito sentido. O que a Action pode fazer com um SQLException, um NullPointerException ou um ClassCastException?

Acredito que nesses casos é melhor deixar que o container efetue o logging da exceção (claro que você deve configurar bem o mecanismo de logging do container): http://edocs.bea.com/wls/docs61/webapp/web_xml.html#1017571

Acho que este artigo é excelente para explicar: