public void EnableTracingForSpecificGenericType() { var setupTracerFactory = new SetupLog(); var traceConfig = new TraceWriterConfig(new ListLogWriter <TraceEntry>(setupTracerFactory)) { Switches = { { typeof(PrivateClass.TestEntryWriter <MessageEntry>), new OnOffTraceSwitch(true) } } }; using (var traceManager = new TraceManager(traceConfig, setupTracerFactory)) { var tracer = traceManager.TracerFor(this); Assert.False(tracer.IsInfoEnabled()); tracer = traceManager.GetTracer(typeof(PrivateClass.TestEntryWriter <>)); Assert.False(tracer.IsInfoEnabled()); tracer = traceManager.TracerFor <PrivateClass.TestEntryWriter <MessageEntry> >(); Assert.True(tracer.IsInfoEnabled()); tracer = traceManager.TracerFor <PrivateClass.TestEntryWriter <TraceEntry> >(); Assert.False(tracer.IsInfoEnabled()); } }
public void UnitTestTracingWithGlobalTraceManager(ConfigForm configForm, int iteration) { // It can occur that the Tracer was obtained before the test starts Tracer tracer = TraceManager.Instance.TracerFor(this); // In a real app you probably don't have to reset the LogManager + TraceManager before configuring. // However for unit testing it can be a good idea to clear configuration from previous tests. LogManager.Instance.Reset(true); TraceManager.Instance.Reset(true); Assert.Same(LogManager.Instance, TraceManager.Instance.LogManager); // Traces sent to this list var setupTracerFactory = TraceManager.Instance.SetupTracerFactory; var listWriter = new ListLogWriter <TraceEntry>(setupTracerFactory); // Add the list TraceWriter only for this class TraceManagerConfig config = TraceManager.Instance.Config; TraceWriterConfig listTraceConfig; if (configForm == ConfigForm.ObjectGraph) { listTraceConfig = new TraceWriterConfig(listWriter) { Switches = { { GetType(), new OnOffTraceSwitch(true) } } }; config.Writers.Add(listTraceConfig); } else if (configForm == ConfigForm.Fluent) { listTraceConfig = config.UseLogWriter(listWriter, GetType(), new OnOffTraceSwitch(true)); } else { throw new NotImplementedException(); } // restart to load config and assign writers TraceManager.Instance.Start(); // Ensure start didn't result in any errors Assert.True(TraceManager.Instance.IsHealthy); tracer.Info("Info message"); tracer.Debug("Debug message"); Assert.Equal(2, listWriter.Count); // Remove the TraceWriterConfig just to ensure that everything returns to normal Assert.True(TraceManager.Instance.Config.Writers.Remove(listTraceConfig)); // restart to reset config TraceManager.Instance.Start(); LogJam.Internal.UnitTests.Trace.TraceManagerConfigTests.AssertEquivalentToDefaultTraceManagerConfig(TraceManager.Instance); // Now tracing goes to the debug window only, but not to the list tracer.Info("Not logged to list, but logged to debug out."); Assert.Equal(2, listWriter.Count); }
/// <summary> /// Configures console tracing using object graph configuration (newing the config objects), and enables all trace levels /// for the <see cref="ConsoleTestCases" /> class. /// </summary> public void ObjectGraphConfigForTraceEnableAllLevels() { ConsoleLogWriterConfig = new ConsoleLogWriterConfig(); ConsoleLogWriterConfig.Format <TraceEntry>(); var config = new TraceWriterConfig(ConsoleLogWriterConfig) { Switches = { // Default threshold (info) for all tracers { Tracer.All, new ThresholdTraceSwitch(TraceLevel.Info) }, // Enable all trace levels for ConsoleTestCases { typeof(ConsoleTestCases), new OnOffTraceSwitch(true) } } }; TraceManager.Config.Writers.Add(config); }
public void MultipleTraceLogWritersForSameNamePrefixWithDifferentSwitchThresholds() { var setupTracerFactory = new SetupLog(); var allListLogWriter = new ListLogWriter <TraceEntry>(setupTracerFactory); var errorListLogWriter = new ListLogWriter <TraceEntry>(setupTracerFactory); var traceWriterConfigAll = new TraceWriterConfig(allListLogWriter) { Switches = { { "LogJam.UnitTests", new OnOffTraceSwitch(true) } } }; var traceWriterConfigErrors = new TraceWriterConfig(errorListLogWriter) { Switches = { { "LogJam.UnitTests", new ThresholdTraceSwitch(TraceLevel.Error) } } }; using (var traceManager = new TraceManager(new TraceManagerConfig(traceWriterConfigAll, traceWriterConfigErrors), setupTracerFactory)) { var tracer = traceManager.TracerFor(this); var fooTracer = traceManager.GetTracer("foo"); tracer.Info("Info"); tracer.Verbose("Verbose"); tracer.Error("Error"); tracer.Severe("Severe"); // fooTracer shouldn't log to either of these lists fooTracer.Severe("foo Severe"); Assert.Equal(2, errorListLogWriter.Count); Assert.Equal(4, allListLogWriter.Count); } }
/// <summary> /// Creates a new <see cref="TraceManager" /> instance using the specified <paramref name="traceWriterConfig" />. /// </summary> /// <param name="traceWriterConfig">The <see cref="TraceWriterConfig" /> to use for this <c>TraceManager</c>.</param> /// <param name="setupLog">The <see cref="SetupTracerFactory" /> to use for tracing setup operations.</param> public TraceManager(TraceWriterConfig traceWriterConfig, SetupLog setupLog = null) : this(new TraceManagerConfig(traceWriterConfig), setupLog) { Contract.Requires <ArgumentNullException>(traceWriterConfig != null); }