Trace i ASP.NET er noget brugbar information til når du f.eks debugger og/eller leder efter mindre performance issues. Du får f.eks load-tider på hvor hurtigt de forskellige events har brugt på at eksekvere i et givent stadie etc. Du kan se om der er nogle af dine kontroller som hænger, hvad der ligger i din headers collection og mange andre ting.
Du kan også bruge trace funktionaliteten til at outputte evt. vigtige informationer og/eller system-fejl. I følgende eksempel outputter jeg information fra en ArgumentException direkte til tracen og ud i browseren.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Int32 age = 0;
ActAsExceptionThrower(age);
}
private void ActAsExceptionThrower(Int32 age)
{
if (age == 0)
{
ArgumentException a = new ArgumentException("age cannot be 0, you redneck!");
a.WriteExceptionToTrace();
}
}
}
public class QueryStringUtil
{
public static T GetValue<T>(String parameter)
{
return (T)Convert.ChangeType(parameter, typeof(T));
}
}
public static class TraceException
{
public static void WriteExceptionToTrace(this Exception ex)
{
if (ex != null && EnableTraceByQuery())
{
HttpContext.Current.Trace.TraceMode = TraceMode.SortByTime;
HttpContext.Current.Trace.Write(ex.Message);
}
}
private static bool EnableTraceByQuery()
{
String tracerQuery = HttpContext.Current.Request.QueryString["tracer"];
if (!String.IsNullOrEmpty(tracerQuery))
{
if (QueryStringUtil.GetValue<Boolean>(tracerQuery))
{
HttpContext.Current.Trace.IsEnabled = true;
return true;
}
}
return false;
}
}
Du skal naturligvis passe på med hvad du outputter til din trace og måske skal du også være forsigtig med hvem der har adgang. Dette er bare et eksempel at det kan lade sig gøre :)