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