Nos capítulos anteriores registramos conteúdos customizados. Na verdade, o Log4net também consegue registrar exceções com toda a pilha de chamadas, facilitando muito a solução de problemas para desenvolvedores.
try
{
int b = 0;
int a = 100 / b;
}
catch (Exception ex)
{
log.Error(ex.Message, ex);
}Code language: PHP (php)
- Disparar exceção:
100 / b. A variávelb=0lança a exceçãoDivideByZeroExceptionde divisão por zero. - Capturar exceção:
catch (Exception ex)captura todas as exceções herdadas deException. - Forma essencial de gravar log:
log.Error(ex.Message, ex);- Primeiro parâmetro: mensagem de log personalizada (aqui usamos a descrição curta da exceção
ex.Message) - O segundo parâmetro obrigatoriamente recebe o objeto de exceção
ex - Quando o log4net identifica que o segundo parâmetro é uma instância
Exception, eleimprime automaticamente a pilha completa (StackTrace) com localização do erro e cadeia de chamadas.
- Primeiro parâmetro: mensagem de log personalizada (aqui usamos a descrição curta da exceção
Má prática (não imprime pilha de chamadas)
// Apenas string é passada, pilha de chamadas é perdida!
log.Error(ex.ToString());
log.Error(ex.Message);Code language: JavaScript (javascript)
Essa abordagem só retorna o texto da exceção. Alguns formatos de log não expandem a pilha de chamadas automaticamente e dificultam a depuração.
Padrão recomendado
// Recomendado: adicionar contexto de negócio e passar objeto de exceção
log.Error("Ocorreu falha durante o cálculo da divisão", ex);Code language: JavaScript (javascript)
Registrar dados da exceção
Previous: Arquivo de configuração separado