Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > Is it possible to email the trace output?

Reply
Thread Tools

Is it possible to email the trace output?

 
 
Big Dave
Guest
Posts: n/a
 
      09-22-2004
Good morning. I'm building a custom error handler class for an
application I'm working on. In production, it will send detailed
error information to an email address specified in web.config when
errors occur, then redirect the user to a friendly error page. I'd
like to include the trace information that you see when trace is
enabled in web.config, but I can't figure out how to access that
information. Does anyone have any suggestion?

Thanks in advance for any help!
 
Reply With Quote
 
 
 
 
Kevin Spencer
Guest
Posts: n/a
 
      09-22-2004
Here's a snippett of code from a static method that we use to log
exceptions. You should be able toadapt it easily:

public static void HandleError(Exception e)
{
try
{
StringBuilder strMessage = new StringBuilder(e.Message);
if (e.InnerException != null)
strMessage.Append(Environment.NewLine + "Inner Exception: " +
e.InnerException.Message);
strMessage.Append(Environment.NewLine + "StackTrace: " + Environment.NewLine
+ e.StackTrace);
LogError(strMessage.ToString());
}
catch {}
}

--
HTH,
Kevin Spencer
..Net Developer
Microsoft MVP
I get paid good money to
solve puzzles for a living

"Big Dave" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) om...
> Good morning. I'm building a custom error handler class for an
> application I'm working on. In production, it will send detailed
> error information to an email address specified in web.config when
> errors occur, then redirect the user to a friendly error page. I'd
> like to include the trace information that you see when trace is
> enabled in web.config, but I can't figure out how to access that
> information. Does anyone have any suggestion?
>
> Thanks in advance for any help!



 
Reply With Quote
 
 
 
 
Greg Burns
Guest
Posts: n/a
 
      09-22-2004
Here is some code I lifted awhile back, sorry i forget who to credit this to
(don't this this includes items added with trace.warn):

HTH,
Greg

Option Strict On

Imports System.Collections.Specialized

Namespace eTime
Class ModError
Private Sub New()

End Sub

Public Shared Function GetHTMLError(ByVal Ex As Exception) As String
'Returns HTML an formatted error message

Dim Heading As String
Dim MyHTML As String
Dim Error_Info As New NameValueCollection
Heading = "<TABLE BORDER=""0"" WIDTH=""100%"" CELLPADDING=""1""
CELLSPACING=""0""><TR><TD bgcolor=""black"" COLSPAN=""2""><FONT
face=""Arial"" color=""white""><B>
<!--HEADER--></B></FONT></TD></TR></TABLE>"
MyHTML = "<FONT face=""Arial"" size=""4"" color=""red"">Error -
" & Ex.Message & "</FONT><BR><BR>"
Error_Info.Add("Message", CleanHTML(Ex.Message))
Error_Info.Add("Source", CleanHTML(Ex.Source))
Error_Info.Add("TargetSite",
CleanHTML(Ex.TargetSite.ToString()))
Error_Info.Add("StackTrace", CleanHTML(Ex.StackTrace))
MyHTML += Heading.Replace("<!--HEADER-->", "Error Information")
MyHTML += CollectionToHtmlTable(Error_Info)
'// QueryString Collection
MyHTML += "<BR><BR>" + Heading.Replace("<!--HEADER-->",
"QueryString Collection")
MyHTML +=
CollectionToHtmlTable(HttpContext.Current.Request. QueryString)
'// Form Collection
MyHTML += "<BR><BR>" + Heading.Replace("<!--HEADER-->", "Form
Collection")
MyHTML +=
CollectionToHtmlTable(HttpContext.Current.Request. Form)
'// Cookies Collection
MyHTML += "<BR><BR>" + Heading.Replace("<!--HEADER-->", "Cookies
Collection")
MyHTML +=
CollectionToHtmlTable(HttpContext.Current.Request. Cookies)
'// Session Variables
MyHTML += "<BR><BR>" + Heading.Replace("<!--HEADER-->", "Session
Variables")
MyHTML += CollectionToHtmlTable(HttpContext.Current.Session)
'// Server Variables
MyHTML += "<BR><BR>" + Heading.Replace("<!--HEADER-->", "Server
Variables")
MyHTML +=
CollectionToHtmlTable(HttpContext.Current.Request. ServerVariables)
Return MyHTML
End Function

Private Shared Function CollectionToHtmlTable(ByVal Collection As
NameValueCollection) As String
Dim TD As String
Dim MyHTML As String
Dim i As Integer
TD = "<TD><FONT face=""Arial""
size=""2""><!--VALUE--></FONT></TD>"
MyHTML = "<TABLE width=""100%"">" & _
" <TR bgcolor=""#C0C0C0"">" & _
TD.Replace("<!--VALUE-->", " <B>Name</B>") & _
" " & TD.Replace("<!--VALUE-->", " <B>Value</B>") & "</TR>"
'No Body? -> N/A
If (Collection.Count <= 0) Then
Collection = New NameValueCollection
Collection.Add("N/A", "")
Else
'Table Body
For i = 0 To Collection.Count - 1
MyHTML += "<TR valign=""top"" bgcolor=""#EEEEEE"">" & _
TD.Replace("<!--VALUE-->", Collection.Keys(i)) & " " & _
TD.Replace("<!--VALUE-->", Collection(i)) & "</TR> "
Next i
End If
'Table Footer
Return MyHTML & "</TABLE>"
End Function

Private Shared Function CollectionToHtmlTable(ByVal Collection As
HttpCookieCollection) As String
'Converts HttpCookieCollection to NameValueCollection()
Dim NVC As NameValueCollection = New NameValueCollection
Dim i As Integer
Dim Value As String
Try
If Collection.Count > 0 Then
For i = 0 To Collection.Count - 1
NVC.Add(Collection.Keys(i), Collection(i).Value)
Next i
End If
Value = CollectionToHtmlTable(NVC)
Return Value
Catch MyError As Exception
MyError.ToString()
End Try
End Function

Private Shared Function CollectionToHtmlTable(ByVal Collection As
System.Web.SessionState.HttpSessionState) As String
'Converts HttpSessionState to NameValueCollection

Dim NVC As NameValueCollection = New NameValueCollection
Dim i As Integer
Dim Value As String

If Not Collection Is Nothing Then

If Collection.Count > 0 Then
For i = 0 To Collection.Count - 1
NVC.Add(Collection.Keys(i),
Collection(i).ToString())
Next i
End If
Value = CollectionToHtmlTable(NVC)
End If

Return Value

End Function

Private Shared Function CleanHTML(ByVal HTML As String) As String
If HTML.Length <> 0 Then
HTML.Replace("<", "<").Replace("\r\n", "<BR>").Replace("&",
"&").Replace(" ", " ")
Else
HTML = ""
End If
Return HTML
End Function

Public Shared Function BuildErrorReport(ByVal exc As Exception,
ByVal iLevel As Integer) As String
'Takes information from the aspproNETException and turns it into
English.
'Returns information recursively for as many InnerExceptions as
there are.
Dim sb As New System.text.StringBuilder
sb.Length = 0 'Clear the buffer

'Info provided by Exception object
sb.Append("Exception object info for level " & iLevel.ToString &
":" & vbCrLf)
sb.Append(vbTab & "Exception Type: " & exc.GetType.ToString &
vbCrLf)
sb.Append(vbTab & "Message: " & exc.Message & vbCrLf)
sb.Append(vbTab & "Source: " & exc.Source & vbCrLf)
sb.Append(vbTab & "Target Site: " & exc.TargetSite.Name &
vbCrLf)
sb.Append("Stack Trace: " & vbCrLf & exc.StackTrace & vbCrLf &
vbCrLf)

If Not exc.InnerException Is Nothing Then
sb.Append(BuildErrorReport(exc.InnerException, iLevel + 1))
End If

Return sb.ToString

End Function
End Class
End Namespace

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)

'Server.GetLastError is a useful method you can use pretty much
anywhere you handle exceptions programmatically.
'But what you always get from this method is an
HttpUnhandledException object.
'You must use this object's InnerException property to get
information about the exception that actually caused the problem.

'Grab a reference to the last error. Use InnerException because
'ASP.NET wraps errors here in an HttpUnhandledException.

Dim LastEx As Exception = Server.GetLastError.InnerException


Dim sb As New System.Text.StringBuilder


If Not LastEx Is Nothing Then
sb.Append(eTime.ModError.BuildErrorReport(LastEx, 1))
Else
sb.Append("No error information available.")
End If


Try
' HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Se curity
ACCESS DENIED!

' had to grant write access ASPNET for this hive
' HKLM\SYSTEM\CurrentControlSet\Services\EventLog

Dim el As New EventLog
el.WriteEntry("TimeSheet Web App", sb.ToString, _
EventLogEntryType.Error, 65535)
el.Close()


Catch ex As Exception
HttpContext.Current.Trace.Warn("eventlog", ex.ToString)
End Try

' Build a MailMessage
Dim mailMessage As Mail.MailMessage = New Mail.MailMessage
mailMessage.From = ConfigurationSettings.AppSettings("ErrorEmail")
mailMessage.To = ConfigurationSettings.AppSettings("ErrorEmail")
mailMessage.Subject = "Error in TimeSheet App"
mailMessage.BodyFormat = Mail.MailFormat.Html


If Not LastEx Is Nothing Then
mailMessage.Body = Replace(sb.ToString, vbCrLf, "<br>") &
"<br><br><hr><br><br>" & eTime.ModError.GetHTMLError(LastEx)
Else
mailMessage.Body = sb.ToString ' send what we know at least
End If

If ConfigurationSettings.AppSettings("EnableErrorEmai l") = "1" Then
Try
Mail.SmtpMail.SmtpServer = "localhost"
Mail.SmtpMail.Send(mailMessage)
Catch ex As Exception
HttpContext.Current.Trace.Warn("email", ex.ToString)
End Try
End If


End Sub

"Big Dave" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) om...
> Good morning. I'm building a custom error handler class for an
> application I'm working on. In production, it will send detailed
> error information to an email address specified in web.config when
> errors occur, then redirect the user to a friendly error page. I'd
> like to include the trace information that you see when trace is
> enabled in web.config, but I can't figure out how to access that
> information. Does anyone have any suggestion?
>
> Thanks in advance for any help!



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Adding my messages to the trace.axd trace? =?Utf-8?B?RGF2aWQgVGhpZWxlbg==?= ASP .Net 3 04-06-2007 06:10 PM
trace.axd and asp.net trace feature IIS only? Jiho Han ASP .Net 0 08-22-2006 12:44 PM
How to redirect output from Diagnostics.Trace to Page.Trace? Matthias S. ASP .Net 1 11-30-2005 09:01 AM
Trace: Can anyone suggest a good tool to catch trace messages? Rukmal Fernando ASP .Net 4 10-27-2003 09:03 PM



Advertisments