namespace System.Workflow.Runtime { using System; using System.Diagnostics; /// /// Holds trace sources for the runtime and associated modules /// internal static class WorkflowTrace { static TraceSource runtime; static TraceSource tracking; static TraceSource host; /// /// Tracesource for the core runtime /// internal static TraceSource Runtime { get { return runtime; } } /// /// Tracesource for tracking /// internal static TraceSource Tracking { get { return tracking; } } /// /// Tracesource for the host /// internal static TraceSource Host { get { return host; } } /// /// Statically set up trace sources /// /// To enable logging to a file, add lines like the following to your app config file. /* */ /// To enable tracing to default trace listeners, add lines like the following /* */ /// static WorkflowTrace() { runtime = new TraceSource("System.Workflow.Runtime"); runtime.Switch = new SourceSwitch("System.Workflow.Runtime", SourceLevels.Off.ToString()); // we'll use ID of 1 for the scheduler, 0 for rest of runtime tracking = new TraceSource("System.Workflow.Runtime.Tracking"); tracking.Switch = new SourceSwitch("System.Workflow.Runtime.Tracking", SourceLevels.Off.ToString()); host = new TraceSource("System.Workflow.Runtime.Hosting"); host.Switch = new SourceSwitch("System.Workflow.Runtime.Hosting", SourceLevels.Off.ToString()); BooleanSwitch logToFile = new BooleanSwitch("System.Workflow LogToFile", "Log traces to file"); if (logToFile.Enabled) { TextWriterTraceListener fileLog = new TextWriterTraceListener("WorkflowTrace.log"); // add to global Listeners list Trace.Listeners.Add(fileLog); // don't add to tracking (which probably has its own log) runtime.Listeners.Add(fileLog); host.Listeners.Add(fileLog); } BooleanSwitch traceToDefault = new BooleanSwitch("System.Workflow LogToTraceListeners", "Trace to listeners in Trace.Listeners", "0"); if (traceToDefault.Enabled) { foreach (TraceListener listener in Trace.Listeners) { if (!(listener is DefaultTraceListener)) { runtime.Listeners.Add(listener); tracking.Listeners.Add(listener); host.Listeners.Add(listener); } } } } } }