Better Tracing in ASP.NET

The ASPSmith Articles, ASPAlliance.com

Better Tracing in ASP.NET

By Steven Smith
http://www.aspalliance.com/stevesmith/articles/bettertrace.asp

There are three features I wish ASP.NET tracing had out of the box:

  • Check for a null context and gracefully disable if context is null (e.g. at design time)
  • If I don't specify a category, default to the name of the method in which the trace is being called.
  • Automatically compile out of production code via the Conditional("DEBUG") attribute or something similar.  Today, Trace routines carry overhead even when tracing is turned off.

To provide these features, I have a simple wrapper class.  You can name the class itself whatever you like but I recommend it be something short so that you don't have to type much to get Tracing into your code.  Feel free to use this wherever you like:

Imports System.Diagnostics

Public Class Toolkit

 

    <Conditional("DEBUG")> _

    Public Shared Sub Trace(ByVal Message As String)

        Toolkit.Trace(New System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name, _

Message)

    End Sub

 

    <Conditional("DEBUG")> _

    Public Shared Sub Trace(ByVal Category As String, ByVal Message As String)

        Toolkit.Trace(Category, Message, Nothing)

    End Sub

 

    <Conditional("DEBUG")> _

    Public Shared Sub Trace(ByVal Category As String, ByVal message As String, _

ByVal myException As Exception)

        Dim context As HttpContext = HttpContext.Current

        If Not context Is Nothing Then

            context.Trace.Write(Category, message, myException)

        End If

    End Sub

End Class