public void NestedDiagnosticContextInformation_is_stored_in_the_same_sort_order_as_used_by_the_nested_diagnostic_layout_renderer() { var ndcSeparator = "::"; var ndlcSeparator = " "; ConfigureLogManager(ndcSeparator, ndlcSeparator); // Act NestedDiagnosticsContext.Clear(); NestedDiagnosticsLogicalContext.Push("foo"); NestedDiagnosticsLogicalContext.Push("bar"); NestedDiagnosticsLogicalContext.Clear(); NestedDiagnosticsContext.Push("baz1"); NestedDiagnosticsContext.Push("baz2"); NestedDiagnosticsContext.Push("baz3"); var logEvent = Log("A", LogLevel.Debug, null, null, "some message"); // Assert var expected = GetExpectedNdcValue(logEvent, ndcSeparator, ndlcSeparator); var actual = GetXmlDocument().GetElementsByTagName("log4j:NDC")[0].InnerText; Assert.Equal(expected, actual); }
public void TargetWithContextNdcSerializeTest() { NestedDiagnosticsContext.Clear(); NestedDiagnosticsContext.Push(new { a = "b" }); CustomTargetWithContext target = new CustomTargetWithContext() { IncludeNdc = true, SkipAssert = true }; WriteAndAssertSingleKey(target); }
public void NDCTop1TestTest() { LogManager.Configuration = XmlLoggingConfiguration.CreateFromXmlString(@" <nlog> <targets><target name='debug' type='Debug' layout='${ndc:topframes=1} ${message}' /></targets> <rules> <logger name='*' minlevel='Debug' writeTo='debug' /> </rules> </nlog>"); NestedDiagnosticsContext.Clear(); LogManager.GetLogger("A").Debug("0"); AssertDebugLastMessage("debug", " 0"); using (NestedDiagnosticsContext.Push("ala")) { LogManager.GetLogger("A").Debug("a"); AssertDebugLastMessage("debug", "ala a"); using (NestedDiagnosticsContext.Push("ma")) { LogManager.GetLogger("A").Debug("b"); AssertDebugLastMessage("debug", "ma b"); using (NestedDiagnosticsContext.Push("kota")) { LogManager.GetLogger("A").Debug("c"); AssertDebugLastMessage("debug", "kota c"); NestedDiagnosticsContext.Push("kopytko"); LogManager.GetLogger("A").Debug("d"); AssertDebugLastMessage("debug", "kopytko d"); Assert.Equal("kopytko", NestedDiagnosticsContext.Pop()); // manual pop LogManager.GetLogger("A").Debug("c"); AssertDebugLastMessage("debug", "kota c"); } LogManager.GetLogger("A").Debug("b"); AssertDebugLastMessage("debug", "ma b"); } LogManager.GetLogger("A").Debug("a"); AssertDebugLastMessage("debug", "ala a"); } LogManager.GetLogger("A").Debug("0"); AssertDebugLastMessage("debug", " 0"); Assert.Equal(string.Empty, NestedDiagnosticsContext.Pop()); Assert.Equal(string.Empty, NestedDiagnosticsContext.TopMessage); NestedDiagnosticsContext.Push("zzz"); Assert.Equal("zzz", NestedDiagnosticsContext.TopMessage); NestedDiagnosticsContext.Clear(); Assert.Equal(string.Empty, NestedDiagnosticsContext.Pop()); Assert.Equal(string.Empty, NestedDiagnosticsContext.TopMessage); }
public void NDCTest() { LogManager.Configuration = XmlLoggingConfiguration.CreateFromXmlString(@" <nlog> <targets><target name='debug' type='Debug' layout='${ndc} ${message}' /></targets> <rules> <logger name='*' minlevel='Debug' writeTo='debug' /> </rules> </nlog>"); NestedDiagnosticsContext.Clear(); LogManager.GetLogger("A").Debug("0"); AssertDebugLastMessage("debug", " 0"); using (NestedDiagnosticsContext.Push("ala")) { LogManager.GetLogger("A").Debug("a"); AssertDebugLastMessage("debug", "ala a"); using (NestedDiagnosticsContext.Push("ma")) { LogManager.GetLogger("A").Debug("b"); AssertDebugLastMessage("debug", "ala ma b"); using (NestedDiagnosticsContext.Push("kota")) { LogManager.GetLogger("A").Debug("c"); AssertDebugLastMessage("debug", "ala ma kota c"); using (NestedDiagnosticsContext.Push("kopytko")) { LogManager.GetLogger("A").Debug("d"); AssertDebugLastMessage("debug", "ala ma kota kopytko d"); } LogManager.GetLogger("A").Debug("c"); AssertDebugLastMessage("debug", "ala ma kota c"); } LogManager.GetLogger("A").Debug("b"); AssertDebugLastMessage("debug", "ala ma b"); } LogManager.GetLogger("A").Debug("a"); AssertDebugLastMessage("debug", "ala a"); } LogManager.GetLogger("A").Debug("0"); AssertDebugLastMessage("debug", " 0"); }
public void If_Ndc_And_Ndlc_is_present_they_are_combined_with_a_NdcSeparator() { // Arrange var ndcSeparator = "::"; var ndlcSeparator = " "; ConfigureLogManager(ndcSeparator, ndlcSeparator); // Act NestedDiagnosticsContext.Clear(); NestedDiagnosticsContext.Push("foo"); NestedDiagnosticsLogicalContext.Clear(); NestedDiagnosticsLogicalContext.Push("bar"); var logEvent = Log("A", LogLevel.Debug, null, null, "some message"); // Assert var expected = GetExpectedNdcValue(logEvent, ndcSeparator, ndlcSeparator); var actual = GetXmlDocument().GetElementsByTagName("log4j:NDC")[0].InnerText; Assert.Equal(expected, actual); }
public void Log4JXmlTest() { LogManager.Configuration = CreateConfigurationFromString(@" <nlog throwExceptions='true'> <targets> <target name='debug' type='Debug' layout='${log4jxmlevent:includeCallSite=true:includeSourceInfo=true:includeMdc=true:includeMdlc=true:includeMdlc=true:IncludeAllProperties=true:ndcItemSeparator=\:\::includenlogdata=true}' /> </targets> <rules> <logger name='*' minlevel='Debug' writeTo='debug' /> </rules> </nlog>"); MappedDiagnosticsContext.Clear(); NestedDiagnosticsContext.Clear(); MappedDiagnosticsContext.Set("foo1", "bar1"); MappedDiagnosticsContext.Set("foo2", "bar2"); MappedDiagnosticsLogicalContext.Clear(); MappedDiagnosticsLogicalContext.Set("foo3", "bar3"); NestedDiagnosticsContext.Push("baz1"); NestedDiagnosticsContext.Push("baz2"); NestedDiagnosticsContext.Push("baz3"); ILogger logger = LogManager.GetLogger("A"); var logEventInfo = LogEventInfo.Create(LogLevel.Debug, "A", new Exception("Hello Exception", new Exception("Goodbye Exception")), null, "some message"); logEventInfo.Properties["nlogPropertyKey"] = "nlogPropertyValue"; logger.Log(logEventInfo); string result = GetDebugLastMessage("debug"); string wrappedResult = "<log4j:dummyRoot xmlns:log4j='http://log4j' xmlns:nlog='http://nlog'>" + result + "</log4j:dummyRoot>"; Assert.NotEqual("", result); // make sure the XML can be read back and verify some fields StringReader stringReader = new StringReader(wrappedResult); using (XmlReader reader = XmlReader.Create(stringReader)) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Prefix == "log4j") { switch (reader.LocalName) { case "dummyRoot": break; case "event": Assert.Equal("DEBUG", reader.GetAttribute("level")); Assert.Equal("A", reader.GetAttribute("logger")); var epochStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); long timestamp = Convert.ToInt64(reader.GetAttribute("timestamp")); var time = epochStart.AddMilliseconds(timestamp); var now = DateTime.UtcNow; Assert.True(now.Ticks - time.Ticks < TimeSpan.FromSeconds(3).Ticks); Assert.Equal(Thread.CurrentThread.ManagedThreadId.ToString(), reader.GetAttribute("thread")); break; case "message": reader.Read(); Assert.Equal("some message", reader.Value); break; case "NDC": reader.Read(); Assert.Equal("baz3::baz2::baz1", reader.Value); break; case "locationInfo": Assert.Equal(MethodBase.GetCurrentMethod().DeclaringType.FullName, reader.GetAttribute("class")); Assert.Equal(MethodBase.GetCurrentMethod().ToString(), reader.GetAttribute("method")); break; case "properties": break; case "throwable": reader.Read(); Assert.Contains("Hello Exception", reader.Value); Assert.Contains("Goodbye Exception", reader.Value); break; case "data": string name = reader.GetAttribute("name"); string value = reader.GetAttribute("value"); switch (name) { case "log4japp": Assert.Equal(AppDomain.CurrentDomain.FriendlyName + "(" + Process.GetCurrentProcess().Id + ")", value); break; case "log4jmachinename": Assert.Equal(Environment.MachineName, value); break; case "foo1": Assert.Equal("bar1", value); break; case "foo2": Assert.Equal("bar2", value); break; case "foo3": Assert.Equal("bar3", value); break; case "nlogPropertyKey": Assert.Equal("nlogPropertyValue", value); break; default: Assert.True(false, "Unknown <log4j:data>: " + name); break; } break; default: throw new NotSupportedException("Unknown element: " + reader.LocalName); } continue; } if (reader.NodeType == XmlNodeType.Element && reader.Prefix == "nlog") { switch (reader.LocalName) { case "eventSequenceNumber": break; case "locationInfo": Assert.Equal(this.GetType().Assembly.FullName, reader.GetAttribute("assembly")); break; case "properties": break; case "data": var name = reader.GetAttribute("name"); var value = reader.GetAttribute("value"); Assert.Equal("nlogPropertyKey", name); Assert.Equal("nlogPropertyValue", value); break; default: throw new NotSupportedException("Unknown element: " + reader.LocalName); } } } } }
public void NDCTest1() { List <Exception> exceptions = new List <Exception>(); ManualResetEvent mre = new ManualResetEvent(false); int counter = 500; int remaining = counter; for (int i = 0; i < counter; ++i) { ThreadPool.QueueUserWorkItem( s => { try { NestedDiagnosticsContext.Clear(); Assert.AreEqual(string.Empty, NestedDiagnosticsContext.TopMessage); Assert.AreEqual(string.Empty, NestedDiagnosticsContext.Pop()); AssertContents(NestedDiagnosticsContext.GetAllMessages()); using (NestedDiagnosticsContext.Push("foo")) { Assert.AreEqual("foo", NestedDiagnosticsContext.TopMessage); AssertContents(NestedDiagnosticsContext.GetAllMessages(), "foo"); using (NestedDiagnosticsContext.Push("bar")) { AssertContents(NestedDiagnosticsContext.GetAllMessages(), "bar", "foo"); Assert.AreEqual("bar", NestedDiagnosticsContext.TopMessage); NestedDiagnosticsContext.Push("baz"); AssertContents(NestedDiagnosticsContext.GetAllMessages(), "baz", "bar", "foo"); Assert.AreEqual("baz", NestedDiagnosticsContext.TopMessage); Assert.AreEqual("baz", NestedDiagnosticsContext.Pop()); AssertContents(NestedDiagnosticsContext.GetAllMessages(), "bar", "foo"); Assert.AreEqual("bar", NestedDiagnosticsContext.TopMessage); } AssertContents(NestedDiagnosticsContext.GetAllMessages(), "foo"); Assert.AreEqual("foo", NestedDiagnosticsContext.TopMessage); } AssertContents(NestedDiagnosticsContext.GetAllMessages()); Assert.AreEqual(string.Empty, NestedDiagnosticsContext.Pop()); } catch (Exception ex) { lock (exceptions) { exceptions.Add(ex); } } finally { if (Interlocked.Decrement(ref remaining) == 0) { mre.Set(); } } }); } mre.WaitOne(); Assert.AreEqual(0, exceptions.Count); }
public void NDCTest2_object() { List <Exception> exceptions = new List <Exception>(); ManualResetEvent mre = new ManualResetEvent(false); int counter = 100; int remaining = counter; for (int i = 0; i < counter; ++i) { ThreadPool.QueueUserWorkItem( s => { try { NestedDiagnosticsContext.Clear(); Assert.Null(NestedDiagnosticsContext.TopObject); Assert.Null(NestedDiagnosticsContext.PopObject()); AssertContents(NestedDiagnosticsContext.GetAllMessages()); using (NestedDiagnosticsContext.Push("foo")) { Assert.Equal("foo", NestedDiagnosticsContext.TopObject); AssertContents(NestedDiagnosticsContext.GetAllObjects(), "foo"); using (NestedDiagnosticsContext.Push("bar")) { AssertContents(NestedDiagnosticsContext.GetAllObjects(), "bar", "foo"); Assert.Equal("bar", NestedDiagnosticsContext.TopObject); NestedDiagnosticsContext.Push("baz"); AssertContents(NestedDiagnosticsContext.GetAllObjects(), "baz", "bar", "foo"); Assert.Equal("baz", NestedDiagnosticsContext.TopObject); Assert.Equal("baz", NestedDiagnosticsContext.PopObject()); AssertContents(NestedDiagnosticsContext.GetAllObjects(), "bar", "foo"); Assert.Equal("bar", NestedDiagnosticsContext.TopObject); } AssertContents(NestedDiagnosticsContext.GetAllObjects(), "foo"); Assert.Equal("foo", NestedDiagnosticsContext.TopObject); } AssertContents(NestedDiagnosticsContext.GetAllMessages()); Assert.Null(NestedDiagnosticsContext.PopObject()); } catch (Exception ex) { lock (exceptions) { exceptions.Add(ex); } } finally { if (Interlocked.Decrement(ref remaining) == 0) { mre.Set(); } } }); } mre.WaitOne(); StringBuilder exceptionsMessage = new StringBuilder(); foreach (var ex in exceptions) { if (exceptionsMessage.Length > 0) { exceptionsMessage.Append("\r\n"); } exceptionsMessage.Append(ex.ToString()); } Assert.True(exceptions.Count == 0, exceptionsMessage.ToString()); }
/// <summary> /// Clears current thread NDC stack. /// </summary> public void Clear() { NestedDiagnosticsContext.Clear(); }