NLog-如何防止数据库抛出错误时站点崩溃

时间:2018-07-05 12:34:37

标签: sql-server nlog

我们当前在网站中使用NLog将消息记录到MSSQL数据库中,而不是常规的日志文件中。

我们如何配置NLog使其忽略任何数据库错误,而不是在找不到数据库时使网站崩溃?

1 个答案:

答案 0 :(得分:-1)

使用Try,Catch子句通常用于从无效操作到连接性问题捕获数据库异常。 NLog似乎可以非常有效地处理异常日志记录,因此我将其记录为错误级别。以下是我的生产代码(不完全是),它似乎可以处理对象级错误和数据库错误。

try
{
//Database Operations...
}
catch (SqlException sqlException)
{    
logger.Error(sqlException, "Sql exception caught while Importing.");
}
catch (NullReferenceException nullRefException)
                {
                    try
                    {
                        DBConnTxn.ConnectDB();
                        DBConnTxn.ExecuteUpdateQuery("ROLLBACK TRAN");
                        DBConnTxn.DisconnectDB();
                        logger.Error(nullRefException, "Null Reference exception caught while Importing.");
                    }
                    catch(Exception ex)
                    {
                        logger.Error(ex, "DB Roll Back Exception while importing.");
                        return false;
                    }
                    return false;
                }
                catch (ArgumentException argsException)
                {
                    try
                    {
                        DBConnTxn.ConnectDB();
                        DBConnTxn.ExecuteUpdateQuery("ROLLBACK TRAN");
                        DBConnTxn.DisconnectDB();
                    }
                    catch { }
                    logger.Error(argsException, "Null Reference exception caught while Importing.");
                    FullAutoMailSendHelper.ProcessErrors.Add("Data Import Error", argsException.Message);
                    return false;
                }
                catch (Exception ex)
                {
                    try
                    {
                        logger.Fatal(ex, "Unhandled Exception occurred");
                        DBConnTxn.ConnectDB();
                        DBConnTxn.ExecuteUpdateQuery("ROLLBACK TRAN");
                        DBConnTxn.DisconnectDB();
                    }
                    catch(Exception innerException) {
                    }

                    FullAutoMailSendHelper.ProcessErrors.Add("Data Import Error",ex.Message);
                    return false;
                }