quarta-feira, 4 de dezembro de 2013

Classe para gerar logs de erros em tratamentos de exceções

Está é uma classe simples criada por mim que pode ser usada para armazenar informações sobre erros ocorridos durante a utilização de um sistema em Java, porém, é necessário que sejam tratados com Exceções os locais ondem podem ocorrer estas falhas.
Ao ocorrer um erro em uma exceção a classe é chamada e recebe por meio de parâmetros a descrição do erro ocorrido, emite uma mensagem ao usuário e armazena as informações em um arquivo de log na pasta do sistema.
Dica: A classe pode ser alterada para salvar os logs em um determinado local e até mesmo fechar o sistema após a ocorrência do erro.
Segue abaixo o código fonte da classe.

Erros.java

 import java.io.File;  
 import java.io.FileWriter;  
 import java.io.PrintWriter;  
 import java.util.Date;  
 import javax.swing.JOptionPane;  
   
 /**  
  *  
  * @author lfsilva  
  */  
 public class Erros  
 {  
   
   public static void salvarLog(Throwable ex, String descricao)   
   {  
     StackTraceElement[] ste = ex.getStackTrace();  
       
     String detalhesErro =   
         "Descricao: \n" + descricao +   
         "\n\nDetalhes do erro: \n" + ex.fillInStackTrace() +          
         "\n\nClasse e local do erro: \n" + ste[0];  
       
     Date date = new Date();  
     String nomeLog = date.toGMTString().replace(":","-")+ ".log";         
           
     JOptionPane.showMessageDialog(  
         null,  
         "O seguinte erro acaba de ocorrer:"  
         + descricao  
         + "\n Mais detalhes no arquivo: "  
         + nomeLog);  
   
     try {  
       FileWriter writer = new FileWriter(new File(nomeLog));  
       PrintWriter saida = new PrintWriter(writer);  
       saida.println(detalhesErro);  
       saida.close();  
       writer.close();  
     }   
     catch (Throwable exx)  
     {  
       JOptionPane.showMessageDialog(null, "Erro ao salvar log!\n" + exx);  
     }  
   }  
 }  

Exemplo de como utilizar:
Teste.java

 /**  
  *  
  * @author lfsilva  
  */  
 public class Teste {  
   
   /**  
    * @param args the command line arguments  
    */  
   public static void main(String[] args) {  
   
     try   
     {  
       String valor = "10,";  
       int num = Integer.parseInt(valor);  
     }   
     catch (NumberFormatException ex)  
     {  
       ex.fillInStackTrace();  //Este método é essencial para exibir o local exato do erro
       Erros.salvarLog(ex, "Erro ao converter valor String para Inteiro!");  
     }  
   }  
 }  

Resultado:


Nenhum comentário:

Postar um comentário