示例#1
0
        [Test] public void TestThreadPropertiesPattern()
        {
            StringAppender stringAppender = new StringAppender();

            stringAppender.Layout = new PatternLayout("%property{prop1}");

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadProperiesPattern");

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no thread properties value set");
            stringAppender.Reset();

            ThreadContext.Properties["prop1"] = "val1";

            log1.Info("TestMessage");
            Assert.AreEqual("val1", stringAppender.GetString(), "Test thread properties value set");
            stringAppender.Reset();

            ThreadContext.Properties.Remove("prop1");

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test thread properties value removed");
            stringAppender.Reset();
        }
        public void TestShutdownAndReconfigure()
        {
            // Create unique repository
            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            // Create appender and configure repos
            StringAppender stringAppender = new StringAppender();

            stringAppender.Layout = new PatternLayout("%m");
            BasicConfigurator.Configure(rep, stringAppender);

            // Get logger from repos
            ILog log1 = LogManager.GetLogger(rep.Name, "logger1");

            log1.Info("TestMessage1");
            Assert.AreEqual("TestMessage1", stringAppender.GetString(), "Test logging configured");
            stringAppender.Reset();

            rep.Shutdown();

            log1.Info("TestMessage2");
            Assert.AreEqual("", stringAppender.GetString(), "Test not logging while shutdown");
            stringAppender.Reset();

            // Create new appender and configure
            stringAppender        = new StringAppender();
            stringAppender.Layout = new PatternLayout("%m");
            BasicConfigurator.Configure(rep, stringAppender);

            log1.Info("TestMessage3");
            Assert.AreEqual("TestMessage3", stringAppender.GetString(), "Test logging re-configured");
            stringAppender.Reset();
        }
        public void TestLogicalThreadPropertiesPatternBasicGetSet()
        {
            StringAppender stringAppender = new StringAppender();

            stringAppender.Layout = new PatternLayout("%property{" + Utils.PROPERTY_KEY + "}");

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestLogicalThreadPropertiesPattern");

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no logical thread properties value set");
            stringAppender.Reset();

            LogicalThreadContext.Properties[Utils.PROPERTY_KEY] = "val1";

            log1.Info("TestMessage");
            Assert.AreEqual("val1", stringAppender.GetString(), "Test logical thread properties value set");
            stringAppender.Reset();

            LogicalThreadContext.Properties.Remove(Utils.PROPERTY_KEY);

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread properties value removed");
            stringAppender.Reset();
        }
示例#4
0
        [Test] public void TestThreadStackPattern2()
        {
            StringAppender stringAppender = new StringAppender();

            stringAppender.Layout = new PatternLayout("%property{prop1}");

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadStackPattern");

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no thread stack value set");
            stringAppender.Reset();

            using (ThreadContext.Stacks["prop1"].Push("val1"))
            {
                log1.Info("TestMessage");
                Assert.AreEqual("val1", stringAppender.GetString(), "Test thread stack value set");
                stringAppender.Reset();

                using (ThreadContext.Stacks["prop1"].Push("val2"))
                {
                    log1.Info("TestMessage");
                    Assert.AreEqual("val1 val2", stringAppender.GetString(), "Test thread stack value pushed 2nd val");
                    stringAppender.Reset();
                }
            }

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test thread stack value removed");
            stringAppender.Reset();
        }
        public void TestLogicalThreadStackPatternNullVal2()
        {
            StringAppender stringAppender = new StringAppender();

            stringAppender.Layout = new PatternLayout("%property{" + Utils.PROPERTY_KEY + "}");

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadStackPattern");

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no logical thread stack value set");
            stringAppender.Reset();

            using (LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push("val1"))
            {
                log1.Info("TestMessage");
                Assert.AreEqual("val1", stringAppender.GetString(), "Test logical thread stack value set");
                stringAppender.Reset();

                using (LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push(null))
                {
                    log1.Info("TestMessage");
                    Assert.AreEqual("val1 ", stringAppender.GetString(), "Test logical thread stack value pushed null");
                    stringAppender.Reset();
                }
            }

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread stack value removed");
            stringAppender.Reset();
        }
        public void TestLogFormatApi_NoFatal()
        {
            StringAppender stringAppender = new StringAppender
            {
                Threshold = Level.Off,
                Layout    = new PatternLayout("%level:%message")
            };

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Fatal");

            // ***
            log1.Fatal("TestMessage");
            Assert.AreEqual("", stringAppender.GetString(), "Test simple FATAL event 1");
            stringAppender.Reset();

            // ***
            log1.Fatal("TestMessage", null);
            Assert.AreEqual("", stringAppender.GetString(), "Test simple FATAL event 2");
            stringAppender.Reset();

            // ***
            log1.Fatal("TestMessage", new Exception("Exception message"));
            Assert.AreEqual("", stringAppender.GetString(), "Test simple FATAL event 3");
            stringAppender.Reset();

            // ***
            log1.FatalFormat("a{0}", "1");
            Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 1 parm");
            stringAppender.Reset();

            // ***
            log1.FatalFormat("a{0}b{1}", "1", "2");
            Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 2 parm");
            stringAppender.Reset();

            // ***
            log1.FatalFormat("a{0}b{1}c{2}", "1", "2", "3");
            Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 3 parm");
            stringAppender.Reset();


            // ***
            log1.FatalFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
            Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 5 parms (only 4 used)");
            stringAppender.Reset();

            // ***
            log1.FatalFormat(null, "Before {0} After {1}", "Middle", "End");
            Assert.AreEqual("", stringAppender.GetString(), "Test formatting with null provider");
            stringAppender.Reset();

            // ***
            log1.FatalFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
            Assert.AreEqual("", stringAppender.GetString(), "Test formatting with 'en' provider");
            stringAppender.Reset();
        }
        public void TestLogFormatApi_Error()
        {
            StringAppender stringAppender = new StringAppender
            {
                Layout = new PatternLayout("%level:%message")
            };

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Error");

            // ***
            log1.Error("TestMessage");
            Assert.AreEqual("ERROR:TestMessage", stringAppender.GetString(), "Test simple ERROR event 1");
            stringAppender.Reset();

            // ***
            log1.Error("TestMessage", null);
            Assert.AreEqual("ERROR:TestMessage", stringAppender.GetString(), "Test simple ERROR event 2");
            stringAppender.Reset();

            // ***
            log1.Error("TestMessage", new Exception("Exception message"));
            Assert.AreEqual("ERROR:TestMessageSystem.Exception: Exception message" + Environment.NewLine, stringAppender.GetString(), "Test simple ERROR event 3");
            stringAppender.Reset();

            // ***
            log1.ErrorFormat("a{0}", "1");
            Assert.AreEqual("ERROR:a1", stringAppender.GetString(), "Test formatted ERROR event with 1 parm");
            stringAppender.Reset();

            // ***
            log1.ErrorFormat("a{0}b{1}", "1", "2");
            Assert.AreEqual("ERROR:a1b2", stringAppender.GetString(), "Test formatted ERROR event with 2 parm");
            stringAppender.Reset();

            // ***
            log1.ErrorFormat("a{0}b{1}c{2}", "1", "2", "3");
            Assert.AreEqual("ERROR:a1b2c3", stringAppender.GetString(), "Test formatted ERROR event with 3 parm");
            stringAppender.Reset();


            // ***
            log1.ErrorFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
            Assert.AreEqual("ERROR:aQbWcEdReTf", stringAppender.GetString(), "Test formatted ERROR event with 5 parms (only 4 used)");
            stringAppender.Reset();

            // ***
            log1.ErrorFormat(null, "Before {0} After {1}", "Middle", "End");
            Assert.AreEqual("ERROR:Before Middle After End", stringAppender.GetString(), "Test formatting with null provider");
            stringAppender.Reset();

            // ***
            log1.ErrorFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
            Assert.AreEqual("ERROR:Before Middle After End", stringAppender.GetString(), "Test formatting with 'en' provider");
            stringAppender.Reset();
        }
        static async Task <string> SomeWorkStack(string stackName)
        {
            StringAppender stringAppender = new StringAppender();

            stringAppender.Layout = new PatternLayout("%property{" + Utils.PROPERTY_KEY + "}");

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log = LogManager.GetLogger(rep.Name, "TestLogicalThreadStackPattern");

            using (LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push(stackName))
            {
                log.Info("TestMessage");
                Assert.AreEqual(string.Format("Outer {0}", stackName), stringAppender.GetString(), "Test logical thread stack value set");
                stringAppender.Reset();

                await MoreWorkStack(log, "A");

                log.Info("TestMessage");
                await MoreWorkStack(log, "B");

                log.Info("TestMessage");
            }

            return(stringAppender.GetString());
        }
        public void TestFormatString()
        {
            StringAppender stringAppender = new StringAppender
            {
                Layout = new PatternLayout("%message")
            };

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestFormatString");

            // ***
            log1.Info("TestMessage");
            Assert.AreEqual("TestMessage", stringAppender.GetString(), "Test simple INFO event");
            stringAppender.Reset();


            // ***
            log1.DebugFormat("Before {0} After", "Middle");
            Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted DEBUG event");
            stringAppender.Reset();

            // ***
            log1.InfoFormat("Before {0} After", "Middle");
            Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted INFO event");
            stringAppender.Reset();

            // ***
            log1.WarnFormat("Before {0} After", "Middle");
            Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted WARN event");
            stringAppender.Reset();

            // ***
            log1.ErrorFormat("Before {0} After", "Middle");
            Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted ERROR event");
            stringAppender.Reset();

            // ***
            log1.FatalFormat("Before {0} After", "Middle");
            Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted FATAL event");
            stringAppender.Reset();


            // ***
            log1.InfoFormat("Before {0} After {1}", "Middle", "End");
            Assert.AreEqual("Before Middle After End", stringAppender.GetString(), "Test simple formatted INFO event 2");
            stringAppender.Reset();

            // ***
            log1.InfoFormat("IGNORE THIS WARNING - EXCEPTION EXPECTED Before {0} After {1} {2}", "Middle", "End");
            Assert.AreEqual(STRING_FORMAT_ERROR, stringAppender.GetString(), "Test formatting error");
            stringAppender.Reset();
        }
        public async Task TestLogicalThreadPropertiesPatternAsyncAwait()
        {
            StringAppender stringAppender = new StringAppender
            {
                Layout = new PatternLayout("%property{" + Utils.PROPERTY_KEY + "}")
            };

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestLogicalThreadPropertiesPattern");

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no logical thread stack value set");
            stringAppender.Reset();

            string testValueForCurrentContext = "Outer";

            LogicalThreadContext.Properties[Utils.PROPERTY_KEY] = testValueForCurrentContext;

            log1.Info("TestMessage");
            Assert.AreEqual(testValueForCurrentContext, stringAppender.GetString(), "Test logical thread properties value set");
            stringAppender.Reset();

            var strings = await Task.WhenAll(Enumerable.Range(0, 10).Select(x => SomeWorkProperties(x.ToString())));

            // strings should be ["00AA0BB0", "01AA1BB1", "02AA2BB2", ...]
            for (int i = 0; i < strings.Length; i++)
            {
                Assert.AreEqual(string.Format("{0}{1}AA{1}BB{1}", testValueForCurrentContext, i), strings[i], "Test logical thread properties expected sequence");
            }

            log1.Info("TestMessage");
            Assert.AreEqual(testValueForCurrentContext, stringAppender.GetString(), "Test logical thread properties value set");
            stringAppender.Reset();

            LogicalThreadContext.Properties.Remove(Utils.PROPERTY_KEY);

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread properties value removed");
            stringAppender.Reset();
        }
示例#11
0
        public void TestNamedPatternConverterWidthoutPrecisionShouldReturnFullName()
        {
            var stringAppender = new StringAppender();
            var layout         = new PatternLayout();

            layout.AddConverter("message-as-name", typeof(MessageAsNamePatternConverter));
            layout.ConversionPattern = "%message-as-name";
            layout.ActivateOptions();

            stringAppender.Layout = layout;

            var rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            var log1 = LogManager.GetLogger(rep.Name, "TestAddingCustomPattern");

            log1.Info("NoDots");
            Assert.AreEqual("NoDots", stringAppender.GetString(), "%message-as-name not registered");
            stringAppender.Reset();

            log1.Info("One.Dot");
            Assert.AreEqual("One.Dot", stringAppender.GetString(), "%message-as-name not registered");
            stringAppender.Reset();

            log1.Info("Tw.o.Dots");
            Assert.AreEqual("Tw.o.Dots", stringAppender.GetString(), "%message-as-name not registered");
            stringAppender.Reset();

            log1.Info("TrailingDot.");
            Assert.AreEqual("TrailingDot.", stringAppender.GetString(), "%message-as-name not registered");
            stringAppender.Reset();

            log1.Info(".LeadingDot");
            Assert.AreEqual(".LeadingDot", stringAppender.GetString(), "%message-as-name not registered");
            stringAppender.Reset();

            // empty string and other evil combinations as tests for of-by-one mistakes in index calculations
            log1.Info(string.Empty);
            Assert.AreEqual(string.Empty, stringAppender.GetString(), "%message-as-name not registered");
            stringAppender.Reset();

            log1.Info(".");
            Assert.AreEqual(".", stringAppender.GetString(), "%message-as-name not registered");
            stringAppender.Reset();

            log1.Info("x");
            Assert.AreEqual("x", stringAppender.GetString(), "%message-as-name not registered");
            stringAppender.Reset();
        }
        public async Task TestLogicalThreadStackPatternAsyncAwait()
        {
            StringAppender stringAppender = new StringAppender();

            stringAppender.Layout = new PatternLayout("%property{" + Utils.PROPERTY_KEY + "}");

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestLogicalThreadStackPattern");

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no logical thread stack value set");
            stringAppender.Reset();

            string testValueForCurrentContext = "Outer";

            string[] strings = null;
            using (LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push(testValueForCurrentContext))
            {
                log1.Info("TestMessage");
                Assert.AreEqual(testValueForCurrentContext, stringAppender.GetString(), "Test logical thread stack value set");
                stringAppender.Reset();

                strings = await Task.WhenAll(Enumerable.Range(0, 10).Select(x => SomeWorkStack(x.ToString())));
            }

            // strings should be ["Outer 0 AOuter 0 AOuter 0Outer 0 BOuter 0 B Outer 0", ...]
            for (int i = 0; i < strings.Length; i++)
            {
                Assert.AreEqual(string.Format("{0} {1} A{0} {1} A{0} {1}{0} {1} B{0} {1} B{0} {1}", testValueForCurrentContext, i), strings[i], "Test logical thread properties expected sequence");
            }

            log1.Info("TestMessage");
            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread properties value removed");
            stringAppender.Reset();
        }
        public void TestStackTracePattern()
        {
            StringAppender stringAppender = new StringAppender();

            stringAppender.Layout = new PatternLayout("%stacktrace{2}");

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestStackTracePattern");

            log1.Info("TestMessage");
            Assert.AreEqual("RuntimeMethodHandle._InvokeMethodFast > PatternLayoutTest.TestStackTracePattern", stringAppender.GetString(), "stack trace value set");
            stringAppender.Reset();
        }
示例#14
0
        public void TestStackTracePattern()
        {
            StringAppender stringAppender = new StringAppender();

            stringAppender.Layout = NewPatternLayout("%stacktrace{2}");

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestStackTracePattern");

            log1.Info("TestMessage");
            StringAssert.EndsWith("PatternLayoutTest.TestStackTracePattern", stringAppender.GetString(), "stack trace value set");
            stringAppender.Reset();
        }
        public void TestFormatString()
        {
            var stringAppender = new StringAppender();

            stringAppender.Layout = new PatternLayout("%message");

            var rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            var log1 = LogManager.GetLogger(rep.Name, "TestFormatString");

            log1.Info("TestMessage");
            Assert.AreEqual("TestMessage", stringAppender.GetString(), "Test simple INFO event");
            stringAppender.Reset();

            // ***
            log1.DebugFormat("Before {0} After", "Middle");
            Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted DEBUG event");
            stringAppender.Reset();

            // ***
            log1.InfoFormat("Before {0} After", "Middle");
            Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted INFO event");
            stringAppender.Reset();

            // ***
            log1.WarnFormat("Before {0} After", "Middle");
            Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted WARN event");
            stringAppender.Reset();

            // ***
            log1.ErrorFormat("Before {0} After", "Middle");
            Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted ERROR event");
            stringAppender.Reset();

            // ***
            log1.FatalFormat("Before {0} After", "Middle");
            Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted FATAL event");
            stringAppender.Reset();


            // ***
            log1.InfoFormat("Before {0} After {1}", "Middle", "End");
            Assert.AreEqual("Before Middle After End", stringAppender.GetString(), "Test simple formatted INFO event 2");
            stringAppender.Reset();
        }
示例#16
0
        public void TestExceptionPattern()
        {
            StringAppender stringAppender = new StringAppender();
            PatternLayout  layout         = new PatternLayout("%exception{stacktrace}");

            stringAppender.Layout = layout;

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestExceptionPattern");

            Exception exception = new Exception("Oh no!");

            log1.Info("TestMessage", exception);

            Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString());

            stringAppender.Reset();
        }
示例#17
0
        public void TestAddingCustomPattern()
        {
            StringAppender stringAppender = new StringAppender();
            PatternLayout  layout         = new PatternLayout();

            layout.AddConverter("TestAddingCustomPattern", typeof(TestMessagePatternConverter));
            layout.ConversionPattern = "%TestAddingCustomPattern";
            layout.ActivateOptions();

            stringAppender.Layout = layout;

            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());

            BasicConfigurator.Configure(rep, stringAppender);

            ILog log1 = LogManager.GetLogger(rep.Name, "TestAddingCustomPattern");

            log1.Info("TestMessage");
            Assert.AreEqual("TestMessage", stringAppender.GetString(), "%TestAddingCustomPattern not registered");
            stringAppender.Reset();
        }