1 namespace System.Workflow.Runtime 2 { 3 using System; 4 using System.Diagnostics; 5 6 /// <summary> 7 /// Holds trace sources for the runtime and associated modules 8 /// </summary> 9 internal static class WorkflowTrace 10 { 11 static TraceSource runtime; 12 static TraceSource tracking; 13 static TraceSource host; 14 15 /// <summary> 16 /// Tracesource for the core runtime 17 /// </summary> 18 internal static TraceSource Runtime 19 { 20 get { return runtime; } 21 } 22 23 /// <summary> 24 /// Tracesource for tracking 25 /// </summary> 26 internal static TraceSource Tracking 27 { 28 get { return tracking; } 29 } 30 31 /// <summary> 32 /// Tracesource for the host 33 /// </summary> 34 internal static TraceSource Host 35 { 36 get { return host; } 37 } 38 39 /// <summary> 40 /// Statically set up trace sources 41 /// 42 /// To enable logging to a file, add lines like the following to your app config file. 43 /* 44 <system.diagnostics> 45 <switches> 46 <add name="System.Workflow LogToFile" value="1" /> 47 </switches> 48 </system.diagnostics> 49 */ 50 /// To enable tracing to default trace listeners, add lines like the following 51 /* 52 <system.diagnostics> 53 <switches> 54 <add name="System.Workflow LogToTraceListener" value="1" /> 55 </switches> 56 </system.diagnostics> 57 */ 58 /// </summary> WorkflowTrace()59 static WorkflowTrace() 60 { 61 runtime = new TraceSource("System.Workflow.Runtime"); 62 runtime.Switch = new SourceSwitch("System.Workflow.Runtime", SourceLevels.Off.ToString()); 63 // we'll use ID of 1 for the scheduler, 0 for rest of runtime 64 65 tracking = new TraceSource("System.Workflow.Runtime.Tracking"); 66 tracking.Switch = new SourceSwitch("System.Workflow.Runtime.Tracking", SourceLevels.Off.ToString()); 67 68 host = new TraceSource("System.Workflow.Runtime.Hosting"); 69 host.Switch = new SourceSwitch("System.Workflow.Runtime.Hosting", SourceLevels.Off.ToString()); 70 71 72 73 BooleanSwitch logToFile = new BooleanSwitch("System.Workflow LogToFile", "Log traces to file"); 74 if (logToFile.Enabled) 75 { 76 TextWriterTraceListener fileLog = new TextWriterTraceListener("WorkflowTrace.log"); 77 // add to global Listeners list 78 Trace.Listeners.Add(fileLog); 79 // don't add to tracking (which probably has its own log) 80 runtime.Listeners.Add(fileLog); 81 host.Listeners.Add(fileLog); 82 } 83 84 BooleanSwitch traceToDefault = new BooleanSwitch("System.Workflow LogToTraceListeners", "Trace to listeners in Trace.Listeners", "0"); 85 if (traceToDefault.Enabled) 86 { 87 foreach (TraceListener listener in Trace.Listeners) 88 { 89 if (!(listener is DefaultTraceListener)) 90 { 91 runtime.Listeners.Add(listener); 92 tracking.Listeners.Add(listener); 93 host.Listeners.Add(listener); 94 } 95 } 96 } 97 } 98 } 99 } 100