andrew4582

Tracing

Feb 8th, 2012
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.95 KB | None | 0 0
  1. public sealed class Tracing {
  2.  
  3.         public static event Action<string> Traced;
  4.  
  5.         static void OnTraced(string msg) {
  6.             if(Traced == null)
  7.                 return;
  8.             Traced(msg);
  9.         }
  10.  
  11.         // Methods
  12.         private Tracing() {
  13.         }
  14.  
  15.         [Conditional("TRACE")]
  16.         public static void Assert(bool condition,string msg) {
  17.             if(!condition) {
  18.                 Trace.WriteLine(msg);
  19.                 Trace.Assert(condition,msg);
  20.             }
  21.         }
  22.  
  23.         [Conditional("TRACE")]
  24.         public static void ExitTracing() {
  25.         }
  26.  
  27.         [Conditional("TRACE")]
  28.         public static void InitTracing() {
  29.         }
  30.  
  31.         [Conditional("TRACE")]
  32.         public static void TraceCall() {
  33.             StackTrace trace = new StackTrace();
  34.             if((trace != null) && (trace.FrameCount > 1)) {
  35.                 StackFrame startFrame = trace.GetFrame(1);
  36.                 TraceCall("",startFrame,trace.FrameCount);
  37.             }
  38.             else {
  39.                 TraceCall("",null,0);
  40.             }
  41.         }
  42.  
  43.         [Conditional("TRACE")]
  44.         public static void TraceCall(string msg) {
  45.             StackTrace trace = new StackTrace();
  46.             if((trace != null) && (trace.FrameCount > 1)) {
  47.                 StackFrame startFrame = trace.GetFrame(1);
  48.                 TraceCall(msg,startFrame,trace.FrameCount);
  49.             }
  50.             else {
  51.                 TraceCall(msg,null,0);
  52.             }
  53.         }
  54.  
  55.         [Conditional("TRACE")]
  56.         private static void TraceCall(string msg,StackFrame startFrame,int indent) {
  57.             try {
  58.                 if(startFrame != null) {
  59.                     StringBuilder builder = new StringBuilder();
  60.                     MethodBase method = startFrame.GetMethod();
  61.                     while(indent-- > 0) {
  62.                         builder.Append("    ");
  63.                     }
  64.                     builder.Append("--> " + method.DeclaringType.Name + "." + method.Name + "()");
  65.                     if(!string.IsNullOrEmpty(msg)) {
  66.                         builder.Append(": " + msg);
  67.                     }
  68.                     TraceMsg(builder.ToString());
  69.                 }
  70.                 else {
  71.                     TraceMsg("Method Unknown: " + msg);
  72.                 }
  73.                 Trace.Flush();
  74.             }
  75.             catch {
  76.                 TraceMsg(msg);
  77.             }
  78.         }
  79.  
  80.         [Conditional("TRACE")]
  81.         public static void TraceInfo(string msg) {
  82.             TraceMsg(msg);
  83.         }
  84.  
  85.         [Conditional("TRACE")]
  86.         public static void TraceMsg(string msg) {
  87.             try {
  88.                 string message = "[" + DateTime.Now.ToString("HH:mm:ss:ffff",CultureInfo.InvariantCulture) + "] - " + msg;
  89.                 Trace.WriteLine(message);
  90.                 Trace.Flush();
  91.                 OnTraced(message);
  92.             }
  93.             catch {
  94.             }
  95.         }
  96.     }
Advertisement
Add Comment
Please, Sign In to add comment