Exemple #1
0
        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());
        }
Exemple #2
0
        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);
        }