/// <summary> /// Save error inside the log database. /// </summary> /// <param name="TituloErro"></param> /// <param name="Acao"></param> /// <param name="TipoErro"></param> /// <param name="MsgAux"></param> /// <param name="Ex"></param> private void SaveError(String TituloErro, String Acao, e_TipoErroEx TipoErro, String MsgAux, Exception Ex) { //Dicionário contendo os parâmetros do insert. Dictionary <String, object> dic = new Dictionary <string, object>(); dic.Add("@APP", "Edgecam Manager Service sync"); dic.Add("@APPVER", Application.ProductVersion); dic.Add("@FORMNAME", DBNull.Value); dic.Add("@ACAO", Acao); dic.Add("@MSG", String.IsNullOrEmpty(MsgAux) == true ? "<None>" : MsgAux); dic.Add("@USER", Environment.UserName); dic.Add("@DATA", DateTime.Now); dic.Add("@TIPOERRO", (int)TipoErro); dic.Add("@TITLE", TituloErro); if (Ex != null) { dic.Add("@EXTIPOERRO", Ex.GetType().ToString()); /* * Dionei Beilke dos Santos * 21/08/2018, at 12:43 AM * Adicionei as condições abaixo, pois estava salvando somente o primeiro nível * da exceção. Agora, o sistema trata, gera um arquivo temporário e armazena o log * no banco de dados. */ CustomException skaEx = new CustomException(Ex, Ex.Message, false); String stackStrace = System.IO.File.ReadAllText(skaEx._DiretorioArquivoLog); System.IO.File.Delete(skaEx._DiretorioArquivoLog); dic.Add("@EXSTACKRACE", stackStrace); //Caso ser um erro provido em um banco de dados, pego o número (para abrir uma investigação posteriormente). if (Ex.GetType().ToString() == "Oracle.DataAccess.Client.OracleException") { String errorCode = Ex.GetType().GetProperty("Number").ToString(); dic.Add("@EXERRORCODE", errorCode); } else if (Ex.GetType().ToString() == "SqlClient.SqlException") { String errorCode = Ex.GetType().GetProperty("Number").ToString(); dic.Add("@EXERRORCODE", errorCode); } else { dic.Add("@EXERRORCODE", "<None>"); } dic.Add("@COMMENTUSER", DBNull.Value); dic.Add("@QUERY", DBNull.Value); } else { dic.Add("@EXTIPOERRO", ""); dic.Add("@EXSTACKRACE", ""); dic.Add("@EXERRORCODE", ""); dic.Add("@COMMENTUSER", DBNull.Value); dic.Add("@QUERY", DBNull.Value); } //Grava a exceção no banco de dados. mCnnBancoLog.ExecutaSql(QueriesSQL.INSERE_NOVA_EXCECAO, dic); }
/// <summary> /// Cadastra um novo log no banco de dados auxiliar (Banco específico para LOGS) apresentando ou /// não uma interface para o usuário preencher com alguma informação adicional. /// </summary> /// <param name="MostrarTela">True para exibir a tela para o usuário adicionar um comentário.</param> /// <param name="TituloErro">Título da mensagem que será apresentada ao usuário</param> /// <param name="NomeInterface">Nome do Formulário (Form)</param> /// <param name="Acao">Qual evento/método que gerou a exceção</param> /// <param name="MsgAux">Mensagem auxiliar (descritivo) do motivo que pode ter gerado a exceção (pode passar vazio como parâmetro).</param> /// <param name="QuerySql">Nome da consulta SQL realizada (caso houver)</param> /// <param name="TipoErro">Tipo de erro que gerou (aviso, informação, erro)</param> /// <param name="ex">Exceção gerada pelo sistema.</param> public static void CadastraNovoLog(Boolean MostrarTela, String TituloErro, String NomeInterface, String Acao, String MsgAux, String QuerySql, e_TipoErroEx TipoErro, Exception ex = null) { //Dicionário contendo os parâmetros do insert. Dictionary <String, object> dic = new Dictionary <string, object>(); if (MostrarTela) { FrmErroInesperado frm = new FrmErroInesperado(TituloErro); frm.ShowDialog(); dic.Add("@APP", Application.ProductName); dic.Add("@APPVER", Application.ProductVersion); dic.Add("@FORMNAME", NomeInterface); dic.Add("@ACAO", Acao); dic.Add("@MSG", String.IsNullOrEmpty(MsgAux) == true ? "<None>" : MsgAux); dic.Add("@USER", Objects.UsuarioAtual != null ? Objects.UsuarioAtual.Login : Environment.UserName); dic.Add("@DATA", DateTime.Now); dic.Add("@TIPOERRO", (int)TipoErro); dic.Add("@TITLE", TituloErro); if (ex != null) { dic.Add("@EXTIPOERRO", ex.GetType().ToString()); /* * Dionei Beilke dos Santos * 21/08/2018, at 12:43 AM * Adicionei as condições abaixo, pois estava salvando somente o primeiro nível * da exceção. Agora, o sistema trata, gera um arquivo temporário e armazena o log * no banco de dados. */ CustomException skaEx = new CustomException(ex, ex.Message, false); String stackStrace = System.IO.File.ReadAllText(skaEx._DiretorioArquivoLog); System.IO.File.Delete(skaEx._DiretorioArquivoLog); dic.Add("@EXSTACKRACE", stackStrace); //Caso ser um erro provido em um banco de dados, pego o número (para abrir uma investigação posteriormente). if (ex.GetType().ToString() == "Oracle.DataAccess.Client.OracleException") { String errorCode = ex.GetType().GetProperty("Number").ToString(); dic.Add("@EXERRORCODE", errorCode); } else if (ex.GetType().ToString() == "SqlClient.SqlException") { String errorCode = ex.GetType().GetProperty("Number").ToString(); dic.Add("@EXERRORCODE", errorCode); } else { dic.Add("@EXERRORCODE", "<None>"); } dic.Add("@COMMENTUSER", frm._ComentarioUsuario); dic.Add("@QUERY", String.IsNullOrEmpty(QuerySql) == true ? "<None>" : QuerySql); } else { dic.Add("@EXTIPOERRO", ""); dic.Add("@EXSTACKRACE", ""); dic.Add("@EXERRORCODE", ""); dic.Add("@COMMENTUSER", frm._ComentarioUsuario); dic.Add("@QUERY", String.IsNullOrEmpty(QuerySql) == true ? "<None>" : QuerySql); } } else { dic.Add("@APP", Application.ProductName); dic.Add("@APPVER", Application.ProductVersion); dic.Add("@FORMNAME", NomeInterface); dic.Add("@ACAO", Acao); dic.Add("@MSG", MsgAux); dic.Add("@USER", Objects.UsuarioAtual.Login != "" ? Objects.UsuarioAtual.Login : ""); dic.Add("@DATA", DateTime.Now); dic.Add("@TIPOERRO", (int)TipoErro); dic.Add("@TITLE", TituloErro); if (ex != null) { dic.Add("@EXTIPOERRO", ex.GetType().ToString()); dic.Add("@EXSTACKRACE", ex.StackTrace); //Caso ser um erro provido em um banco de dados, pego o número (para abrir uma investigação posteriormente). if (ex.GetType().ToString() == "Oracle.DataAccess.Client.OracleException") { String errorCode = ex.GetType().GetProperty("Number").ToString(); dic.Add("@EXERRORCODE", errorCode); } else if (ex.GetType().ToString() == "SqlClient.SqlException") { String errorCode = ex.GetType().GetProperty("Number").ToString(); dic.Add("@EXERRORCODE", errorCode); } else { dic.Add("@EXERRORCODE", "<None>"); } dic.Add("@COMMENTUSER", ""); dic.Add("@QUERY", String.IsNullOrEmpty(QuerySql) == true ? "<None>" : QuerySql); } else { dic.Add("@EXTIPOERRO", ""); dic.Add("@EXSTACKRACE", ""); dic.Add("@EXERRORCODE", ""); dic.Add("@COMMENTUSER", ""); dic.Add("@QUERY", String.IsNullOrEmpty(QuerySql) == true ? "<None>" : QuerySql); } } //Grava a exceção no banco de dados. Objects.CnnBancoLog.ExecutaSql(Consultas_Log.INSERE_NOVA_EXCECAO, dic); if (MostrarTela) { System.Windows.Forms.MessageBox.Show("Obrigado pela sua colaboração em melhorar o sistema", "Relatório recebido com êxito", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); } }