Showing posts with label Error Detail. Show all posts
Showing posts with label Error Detail. Show all posts

Tuesday, June 2, 2015

Get error with details

You can log error with all details you want. Here is the example. You need to just pass the exception object & it will return you the whole error details which will be very helpful.  



public static string GetErrorInfo(Exception ex)
        {
            StringBuilder errorRows = new StringBuilder();

            StackTrace stackTrace = new StackTrace(ex, true);
            StackFrame stackFrame = stackTrace.GetFrame(stackTrace.FrameCount - 1);
            MethodBase methodBase = null;
            try
            {
                methodBase = stackFrame.GetMethod();
            }
            catch { }
            errorRows.AppendLine("<b>Server         : </b>" + System.Environment.MachineName + "<HR/>");
            errorRows.AppendLine("<b>Date Time         : </b>" + DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss") + "<HR/>");
            try
            {
                errorRows.AppendLine("<b>User              : </b>" + SPContext.Current.Web.CurrentUser.Name + "<HR/>");
                errorRows.AppendLine("<b>Web               : </b>" + SPContext.Current.Web.Url + "<HR/>");
                errorRows.AppendLine("<b>Page              : </b>" + HttpContext.Current.Request.Url.AbsolutePath + "<HR/>");
            }
            catch { }

            try
            {
                errorRows.AppendLine("<b>Class Name        : </b>" + methodBase.DeclaringType.FullName + "<HR/>");
                errorRows.AppendLine("<b>Parent Method Name: </b>" + methodBase.Name + "<HR/>");
            }
            catch { }
            errorRows.AppendLine("<b>Error Method      : </b>" + ex.TargetSite.Name + "<HR/>");
            errorRows.AppendLine("<b>Method Tree       : </b>" + getMathodNames(stackTrace.GetFrames()) + "<HR/>");
            errorRows.AppendLine("<b>Assembly Name     : </b>" + Assembly.GetExecutingAssembly().FullName + "<HR/>");
            errorRows.AppendLine("<b>Error Type        : </b>" + ex.GetType().ToString() + "<HR/>");
            errorRows.AppendLine("<b>Message           : </b>" + ex.Message + "<HR/>");
            errorRows.AppendLine("<b>Source            : </b>" + ex.Source + "<HR/>");
            errorRows.AppendLine("<b>Target            : </b>" + ex.TargetSite.ToString() + "<HR/>");
            errorRows.AppendLine("<b>Stack Trace       : </b>" + ex.StackTrace + "<HR/>");



            // add any inner exceptions
            Exception innerException = ex.InnerException;

            while (innerException != null)
            {
                StackTrace stackTraceInner = new StackTrace(innerException, true);
                StackFrame stackFrameInner = stackTraceInner.GetFrame(stackTraceInner.FrameCount - 1);
                MethodBase methodBaseInner = stackFrameInner.GetMethod();
                errorRows.AppendLine("<b>---------------------Inner Exception---------------------</b><HR/>");
                errorRows.AppendLine("<b>Class Name        : </b>" + methodBaseInner.DeclaringType.FullName + "<HR/>");
                errorRows.AppendLine("<b>Parent Method Name: </b>" + methodBaseInner.Name + "<HR/>");
                errorRows.AppendLine("<b>Error Method      : </b>" + innerException.TargetSite.Name + "<HR/>");
                errorRows.AppendLine("<b>Method Tree       : </b>" + getMathodNames(stackTraceInner.GetFrames()) + "<HR/>");
                errorRows.AppendLine("<b>Error Type        : </b>" + innerException.GetType().ToString() + "<HR/>");
                errorRows.AppendLine("<b>Message           : </b>" + innerException.Message + "<HR/>");
                errorRows.AppendLine("<b>Source            : </b>" + innerException.Source + "<HR/>");
                errorRows.AppendLine("<b>Target            : </b>" + innerException.TargetSite.ToString() + "<HR/>");
                errorRows.AppendLine("<b>Stack Trace       : </b>" + innerException.StackTrace + "<HR/>");

                innerException = innerException.InnerException;
            }

            return errorRows.ToString();
        }

        private static string getMathodNames(StackFrame[] fs)
        {
            string methodNames = "";
            foreach (StackFrame stackFrame in fs)
            {
                MethodBase methodBase = stackFrame.GetMethod();
                methodNames += methodBase.Name + " ,";
            }

            return methodNames;
        }