예제 #1
0
        public void TraceToString(ConfigForm configForm)
        {
            var stringWriter = new StringWriter();

            TraceManager traceManager;

            if (configForm == ConfigForm.ObjectGraph)
            {
                var config = new TextWriterLogWriterConfig(stringWriter).Format(new DefaultTraceFormatter()
                {
                    IncludeDate      = true,
                    IncludeTimestamp = true
                });
                traceManager = new TraceManager(config);
            }
            else if (configForm == ConfigForm.Fluent)
            {
                traceManager = new TraceManager();
                traceManager.Config.TraceTo(stringWriter,
                                            traceFormatter: new DefaultTraceFormatter()
                {
                    IncludeDate      = true,
                    IncludeTimestamp = true
                });
            }
            else
            {
                throw new NotImplementedException();
            }

            using (traceManager)
            {
                var tracer = traceManager.TracerFor(this);
                Assert.True(traceManager.IsStarted);
                Assert.True(traceManager.LogManager.IsStarted);

                Assert.True(tracer.IsInfoEnabled());
                Assert.False(tracer.IsVerboseEnabled());

                Assert.False(traceManager.IsStopped);
                Assert.False(traceManager.LogManager.IsStopped);
                Assert.True(traceManager.IsHealthy);

                //Assert.Single(tracer.Writers);
                //Assert.IsType<DebuggerLogWriter>(tracer.Writers[0].innerEntryWriter);
                tracer.Info("Info message");
                tracer.Debug("Debug message not written");
            }

            Assert.Matches(@"Info\s+LJ\.UT\.T\.Config\.TraceManagerConfigTests\s+Info message\r\n", stringWriter.ToString());

            _testOutputHelper.WriteEntries(traceManager.SetupLog);

            Assert.False(traceManager.IsStarted);
            Assert.False(traceManager.LogManager.IsStarted);
            Assert.True(traceManager.IsStopped);
            Assert.True(traceManager.LogManager.IsStopped);
            Assert.True(traceManager.IsHealthy);
        }
예제 #2
0
        public void AddingTraceWriterConfigUpdatesLogManagerConfig()
        {
            var textWriterLogWriterConfig = new TextWriterLogWriterConfig(new StringWriter());

            var logWriterConfigs = new ILogWriterConfig[]
            {
                new ListLogWriterConfig <TraceEntry>(),
                textWriterLogWriterConfig
            };

            using (var traceManager = new TraceManager())
            {
                foreach (var logWriterConfig in logWriterConfigs)
                {
                    traceManager.Config.Writers.Add(new TraceWriterConfig(logWriterConfig, TraceManagerConfig.CreateDefaultSwitchSet()));

                    Assert.Contains(traceManager.LogManager.Config.Writers, lwc => lwc == logWriterConfig);
                }
            }
        }
예제 #3
0
        public void LogWriterCreateExceptionIsHandled()
        {
            Func <TextWriter> throwOnCreate = () => { throw new AccessViolationException("Testing what happens when access is denied"); };

            using (var logManager = new LogManager())
            {
                TextWriterLogWriterConfig logWriterConfig = logManager.Config.UseTextWriter(throwOnCreate);
                logWriterConfig.Format(new DefaultTraceFormatter());
                Assert.True(logManager.IsHealthy);

                // Exception is thrown during Start()
                logManager.Start();
                Assert.False(logManager.IsHealthy);
                _testOutputHelper.WriteEntries(logManager.SetupLog);

                ILogWriter logWriter;
                Assert.False(logManager.TryGetLogWriter(logWriterConfig, out logWriter));

                var traceEntryWriter = logManager.GetEntryWriter <TraceEntry>();
                Assert.NotNull(traceEntryWriter);
                Assert.IsType <NoOpEntryWriter <TraceEntry> >(traceEntryWriter);
            }
        }
예제 #4
0
        public void RemovingTraceWriterConfigLeavesWritersFormattedForOtherEntryTypes()
        {
            var textWriterLogWriterConfig = new TextWriterLogWriterConfig(new StringWriter());

            textWriterLogWriterConfig.Format <MessageEntry>();

            using (var traceManager = new TraceManager())
            {
                // Add tracing to the textWriter
                var traceWriterConfig = traceManager.Config.TraceTo(textWriterLogWriterConfig);

                // The textWriterLogWriter should now include formatters for 2 entry types
                Assert.True(textWriterLogWriterConfig.HasFormatterFor <TraceEntry>());
                Assert.True(textWriterLogWriterConfig.HasFormatterFor <MessageEntry>());

                // Remove the LogWriter from LogManager.Config
                traceManager.LogManager.Config.Writers.Remove(textWriterLogWriterConfig);

                // Now it should not exist either in the TraceManagerConfig or the LogManagerConfig
                Assert.DoesNotContain(traceManager.LogManager.Config.Writers, lwc => lwc == textWriterLogWriterConfig);
                Assert.DoesNotContain(traceManager.Config.Writers, twc => twc == traceWriterConfig);

                // Add tracing to the textWriter (again)
                traceWriterConfig = traceManager.Config.TraceTo(textWriterLogWriterConfig);

                // Now it should exist in both the TraceManagerConfig and the LogManagerConfig
                Assert.Contains(traceManager.LogManager.Config.Writers, lwc => lwc == textWriterLogWriterConfig);
                Assert.Contains(traceManager.Config.Writers, twc => twc == traceWriterConfig);

                // Remove tracing to the textWriter
                Assert.True(traceManager.Config.Writers.Remove(traceWriterConfig));

                // Now it should exist only in the LogManagerConfig
                Assert.Contains(traceManager.LogManager.Config.Writers, lwc => lwc == textWriterLogWriterConfig);
                Assert.DoesNotContain(traceManager.Config.Writers, twc => twc == traceWriterConfig);
            }
        }
예제 #5
0
        public void RemovingTraceWriterConfigDoesNotRemoveLogWriterConfigs()
        {
            var textWriterLogWriterConfig = new TextWriterLogWriterConfig(new StringWriter());

            var logWriterConfigs = new ILogWriterConfig[]
            {
                new ListLogWriterConfig <TraceEntry>(),
                textWriterLogWriterConfig
            };
            var traceWriterConfigs = new List <TraceWriterConfig>();

            using (var traceManager = new TraceManager())
            {
                foreach (var logWriterConfig in logWriterConfigs)
                {
                    traceWriterConfigs.Add(new TraceWriterConfig(logWriterConfig, TraceManagerConfig.CreateDefaultSwitchSet()));
                }
                traceManager.Config.Writers.UnionWith(traceWriterConfigs);

                // Test removing each
                for (int i = 0; i < logWriterConfigs.Length; ++i)
                {
                    var logWriterConfig   = logWriterConfigs[i];
                    var traceWriterConfig = traceWriterConfigs[i];

                    // Each logWriterConfig should exist in the LogManagerConfig before it is removed from the TraceManagerConfig
                    Assert.Contains(traceManager.LogManager.Config.Writers, lwc => lwc == logWriterConfig);

                    traceManager.Config.Writers.Remove(traceWriterConfig);
                    Assert.DoesNotContain(traceManager.Config.Writers, twc => twc == traceWriterConfig);

                    // LogWriters are left in place, because they may be used for other purposes
                    Assert.Contains(traceManager.LogManager.Config.Writers, lwc => lwc == logWriterConfig);
                }
            }
        }