Μία function που έχω γράψει και μου έχει φανεί ιδιαίτερα χρήσιμη (εφόσον το web application είναι live) είναι η παρακάτω:
public void LogError(Exception ex)
{
SqlCommand myComm = new SqlCommand("INSERT INTO errorlog (logdate, url, errormessage, innerexception, errorsource, errorstacktrace, errortargetsite) VALUES (@logdate, @Url, @ErrorMessage, @InnerException, @ErrorSource, @ErrorStackTrace, @ErrorTargetSite)", myConn);
myComm.Parameters.Add(new SqlParameter("@logdate", SqlDbType.DateTime)).Value = DateAndTime.Now().ToUniversalTime();
myComm.Parameters.Add(new SqlParameter("@Url", SqlDbType.NVarChar)).Value = System.Web.HttpContext.Current.Request.Url.AbsoluteUri();
myComm.Parameters.Add(new SqlParameter("@ErrorMessage", SqlDbType.NVarChar)).Value = ex.Message;
if (ex.InnerException != null) myComm.Parameters.Add(new SqlParameter("@InnerException", SqlDbType.NVarChar)).Value = ex.InnerException.ToString();
myComm.Parameters.Add(new SqlParameter("@ErrorSource", SqlDbType.NVarChar)).Value = ex.Source;
myComm.Parameters.Add(new SqlParameter("@ErrorStackTrace", SqlDbType.NVarChar)).Value = ex.StackTrace;
myComm.Parameters.Add(new SqlParameter("@ErrorTargetSite", SqlDbType.NVarChar)).Value = ex.TargetSite.ToString();
myComm.ExecuteNonQuery();
myComm.Dispose();
}
Τη συνάρτηση αυτή μπορείς να τη βάλεις σε κάθε try catch και για τα unhandled errors μπορείς να βάλεις στο Global.asax αρχείο το
public void Application_Error(object sender, EventArgs e)
{
LogError(Server.GetLastError);
}
Έτσι καταγράφονται όλες οι πληροφορίες, και κυρίως το Stack Trace, που σου δίνει η error σελίδα όταν τρέχεις locally.
Τάσος Καραγιάννης
Baby debugging steps...