0
我正在創建一個將異常記錄到SQL Server數據庫的錯誤日誌應用程序。我希望完成的任務是能夠在錯誤日誌記錄應用程序本身中捕獲錯誤,如果錯誤日誌應用程序發生並且通過電子郵件發送該信息。我正在使用不同的庫進行電子郵件發送,但這不是問題,但是我無法捕獲應用程序本身中的錯誤並將其返回給調用者。如果我能得到一些很棒的建議。捕獲異常記錄器錯誤
這是主代碼:
public long LogError(ApplicationErrorLog error)
{
try
{
}
catch
{
}
return sp_Insert_ErrorLog(error);
}
private long sp_Insert_ErrorLog(ApplicationErrorLog error)
{
try
{
var application = new SqlParameter("@Application", error.Application);
var objectId = new SqlParameter("@ObjectId", error.ObjectId);
var exceptionMessage = new SqlParameter("@ExceptionMessage", error.ExceptionMessage);
var stackTrace = new SqlParameter("@StackTrace", error.StackTrace);
var innerExceptions = (error.InnerException != null)
? GetInnerExceptions(error.InnerException)
: string.Empty;
var innerException = new SqlParameter("@InnerException", innerExceptions);
var createdBy = new SqlParameter("@CreatedBy", error.CreatedBy);
var date = new SqlParameter("@CreatedDatetime", error.CreatedDateTime);
var returnCode = new SqlParameter("@ReturnVal", SqlDbType.BigInt)
{
Direction = ParameterDirection.Output
};
var parameters = new List<SqlParameter>()
{
application,
objectId,
exceptionMessage,
stackTrace,
innerException,
createdBy,
date,
returnCode
};
Database.SqlQuery<object>("exec @ReturnVal = sp_Insert_ErrorLog @Application, @ObjectId, @ExceptionMessage, @StackTrace, @InnerException, @CreatedBy, @CreatedDatetime", parameters.ToArray()).FirstOrDefault();
returnCode.ToString();
return (int)returnCode.Value;
}
catch (Exception ex)
{
return 0;
}
}
,這是主叫方:
private void button1_Click(object sender, EventArgs e)
{
try
{
throw new ApplicationException("Throw error");
}
catch (Exception ex)
{
var conn = ConfigurationManager.ConnectionStrings["ErrorLogger"].ConnectionString;
using (var log = new ErrorLogger("ErrorLogger"))
{
var error = new ApplicationErrorLog()
{
ObjectId = ex.Source,
StackTrace = ex.StackTrace,
Application = "Test",
CreatedBy = "Mike",
CreatedDateTime = DateTime.Now,
ExceptionMessage = ex.Message,
InnerException = ex.InnerException
};
var errId = log.LogError(error);
MessageBox.Show("Error:" + errId.ToString());
};
}
}
將調用移至try中的sp_Insert_ErrorLog方法。你應該考慮從sp_改變你的前綴,甚至更好的是沒有前綴。該前綴可能會導致一些問題。 https://sqlperformance.com/2012/10/t-sql-queries/sp_prefix –
好吧,然後我的捕獲將簡單地「catch(Exception ex){return 0;}」返回錯誤,如果它來自應用本身? @SeanLange –
您的捕獲將有邏輯發送您的電子郵件。但是你應該刪除正在做這項工作的方法的try catch,因爲這是你想要冒出的異常。或者,您可以添加邏輯來發送電子郵件,忘記您的新方法。 –