public void RemovedTargetShouldNotLog() { LogManager.ThrowExceptions = true; var config = new LoggingConfiguration(); var targetA = new MemoryQueueTarget("TargetA") { Layout = "A | ${message}" }; var targetB = new MemoryQueueTarget("TargetB") { Layout = "B | ${message}" }; config.AddRule(LogLevel.Debug, LogLevel.Fatal, targetA); config.AddRule(LogLevel.Debug, LogLevel.Fatal, targetB); LogManager.Configuration = config; Assert.Equal(new[] { "TargetA", "TargetB" }, LogManager.Configuration.ConfiguredNamedTargets.Select(target => target.Name)); Assert.NotNull(LogManager.Configuration.FindTargetByName("TargetA")); Assert.NotNull(LogManager.Configuration.FindTargetByName("TargetB")); var logger = LogManager.GetCurrentClassLogger(); logger.Info("Hello World"); Assert.Equal("A | Hello World", targetA.Logs.LastOrDefault()); Assert.Equal("B | Hello World", targetB.Logs.LastOrDefault()); // Remove the first target from the configuration LogManager.Configuration.RemoveTarget("TargetA"); Assert.Equal(new[] { "TargetB" }, LogManager.Configuration.ConfiguredNamedTargets.Select(target => target.Name)); Assert.Null(LogManager.Configuration.FindTargetByName("TargetA")); Assert.NotNull(LogManager.Configuration.FindTargetByName("TargetB")); logger.Info("Goodbye World"); Assert.Null(targetA.Logs); // Flushed and closed Assert.Equal("B | Goodbye World", targetB.Logs.LastOrDefault()); }
public void ThreadSafe_getCurrentClassLogger_test() { MemoryQueueTarget mTarget = new MemoryQueueTarget(1000); MemoryQueueTarget mTarget2 = new MemoryQueueTarget(1000); var task1 = Task.Run(() => { //need for init LogManager.Configuration = new LoggingConfiguration(); LogManager.ThrowExceptions = true; LogManager.Configuration.AddTarget("memory", mTarget); LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Debug, mTarget)); System.Threading.Thread.Sleep(1); LogManager.ReconfigExistingLoggers(); System.Threading.Thread.Sleep(1); mTarget.Layout = @"${date:format=HH\:mm\:ss}|${level:uppercase=true}|${message} ${exception:format=tostring}"; }); var task2 = task1.ContinueWith((t) => { LogManager.Configuration.AddTarget("memory2", mTarget2); LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Debug, mTarget2)); System.Threading.Thread.Sleep(1); LogManager.ReconfigExistingLoggers(); System.Threading.Thread.Sleep(1); mTarget2.Layout = @"${date:format=HH\:mm\:ss}|${level:uppercase=true}|${message} ${exception:format=tostring}"; }); System.Threading.Thread.Sleep(1); Parallel.For(0, 8, new ParallelOptions() { MaxDegreeOfParallelism = 8 }, (e) => { bool task1Complete = false, task2Complete = false; for (int i = 0; i < 100; ++i) { if (i > 25 && !task1Complete) { task1.Wait(5000); task1Complete = true; } if (i > 75 && !task2Complete) { task2.Wait(5000); task2Complete = true; } // Multiple threads initializing new loggers while configuration is changing var loggerA = LogManager.GetLogger(e + "A" + i); loggerA.Info("Hi there {0}", e); var loggerB = LogManager.GetLogger(e + "B" + i); loggerB.Info("Hi there {0}", e); var loggerC = LogManager.GetLogger(e + "C" + i); loggerC.Info("Hi there {0}", e); var loggerD = LogManager.GetLogger(e + "D" + i); loggerD.Info("Hi there {0}", e); } ; }); Assert.NotEqual(0, mTarget.Logs.Count + mTarget2.Logs.Count); }