From ecf070cded270629598b02befd95959aa643dca8 Mon Sep 17 00:00:00 2001 From: Rolf Kristensen Date: Wed, 19 Apr 2023 20:45:46 +0200 Subject: [PATCH] Log4jXmlEvent - Correct removal of dummyNamespace when using IncludeScopeProperties --- .../Log4JXmlEventLayoutRenderer.cs | 43 ++++++++----------- .../LayoutRenderers/Log4JXmlTests.cs | 2 + 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/NLog/LayoutRenderers/Log4JXmlEventLayoutRenderer.cs b/src/NLog/LayoutRenderers/Log4JXmlEventLayoutRenderer.cs index 20fd67481b..9c9bc1b806 100644 --- a/src/NLog/LayoutRenderers/Log4JXmlEventLayoutRenderer.cs +++ b/src/NLog/LayoutRenderers/Log4JXmlEventLayoutRenderer.cs @@ -298,24 +298,18 @@ protected override void Append(StringBuilder builder, LogEventInfo logEvent) xtw.WriteStartElement("log4j", "properties", dummyNamespace); - AppendScopeContextProperties("log4j", dummyNamespaceRemover, xtw); + AppendScopeContextProperties(xtw); if (IncludeEventProperties) { - AppendProperties("log4j", dummyNamespaceRemover, xtw, logEvent); + AppendDataProperties("log4j", dummyNamespace, xtw, logEvent); } AppendParameters(logEvent, xtw); - xtw.WriteStartElement("log4j", "data", dummyNamespace); - xtw.WriteAttributeString("name", "log4japp"); - xtw.WriteAttributeSafeString("value", AppInfo?.Render(logEvent) ?? string.Empty); - xtw.WriteEndElement(); + AppendDataProperty(xtw, "log4japp", AppInfo?.Render(logEvent) ?? string.Empty, dummyNamespace); - xtw.WriteStartElement("log4j", "data", dummyNamespace); - xtw.WriteAttributeString("name", "log4jmachinename"); - xtw.WriteAttributeSafeString("value", _machineName); - xtw.WriteEndElement(); + AppendDataProperty(xtw, "log4jmachinename", _machineName, dummyNamespace); xtw.WriteEndElement(); // properties @@ -332,7 +326,7 @@ protected override void Append(StringBuilder builder, LogEventInfo logEvent) } } - private void AppendScopeContextProperties(string prefix, string propertiesNamespace, XmlWriter xtw) + private void AppendScopeContextProperties(XmlWriter xtw) { if (IncludeScopeProperties) { @@ -348,10 +342,7 @@ private void AppendScopeContextProperties(string prefix, string propertiesNamesp if (propertyValue is null) continue; - xtw.WriteStartElement(prefix, "data", propertiesNamespace); - xtw.WriteAttributeSafeString("name", scopeProperty.Key); - xtw.WriteAttributeString("value", propertyValue); - xtw.WriteEndElement(); + AppendDataProperty(xtw, scopeProperty.Key, propertyValue, dummyNamespace); } } } @@ -379,10 +370,7 @@ private void AppendParameters(LogEventInfo logEvent, XmlWriter xtw) if (!parameter.IncludeEmptyValue && string.IsNullOrEmpty(parameterValue)) continue; - xtw.WriteStartElement("log4j", "data", dummyNamespace); - xtw.WriteAttributeSafeString("name", parameter.Name); - xtw.WriteAttributeSafeString("value", parameterValue); - xtw.WriteEndElement(); + AppendDataProperty(xtw, parameter.Name, parameterValue, dummyNamespace); } } @@ -420,12 +408,12 @@ private void AppendCallSite(LogEventInfo logEvent, XmlWriter xtw) xtw.WriteEndElement(); xtw.WriteStartElement("nlog", "properties", dummyNLogNamespace); - AppendProperties("nlog", dummyNLogNamespace, xtw, logEvent); + AppendDataProperties("nlog", dummyNLogNamespace, xtw, logEvent); xtw.WriteEndElement(); } } - private void AppendProperties(string prefix, string propertiesNamespace, XmlWriter xtw, LogEventInfo logEvent) + private void AppendDataProperties(string prefix, string propertiesNamespace, XmlWriter xtw, LogEventInfo logEvent) { if (logEvent.HasProperties) { @@ -439,12 +427,17 @@ private void AppendProperties(string prefix, string propertiesNamespace, XmlWrit if (propertyValue is null) continue; - xtw.WriteStartElement(prefix, "data", propertiesNamespace); - xtw.WriteAttributeString("name", propertyKey); - xtw.WriteAttributeString("value", propertyValue); - xtw.WriteEndElement(); + AppendDataProperty(xtw, propertyKey, propertyValue, propertiesNamespace, prefix); } } } + + private static void AppendDataProperty(XmlWriter xtw, string propertyKey, string propertyValue, string propertiesNamespace, string prefix = "log4j") + { + xtw.WriteStartElement(prefix, "data", propertiesNamespace); + xtw.WriteAttributeString("name", propertyKey); + xtw.WriteAttributeString("value", propertyValue); + xtw.WriteEndElement(); + } } } diff --git a/tests/NLog.UnitTests/LayoutRenderers/Log4JXmlTests.cs b/tests/NLog.UnitTests/LayoutRenderers/Log4JXmlTests.cs index ff94975b03..7b133e7560 100644 --- a/tests/NLog.UnitTests/LayoutRenderers/Log4JXmlTests.cs +++ b/tests/NLog.UnitTests/LayoutRenderers/Log4JXmlTests.cs @@ -75,6 +75,8 @@ public void Log4JXmlTest() logEventInfo.Properties["nlogPropertyKey"] = "nlogPropertyValue"; logger.Log(logEventInfo); string result = GetDebugLastMessage("debug", logFactory); + Assert.DoesNotContain("dummy", result); + string wrappedResult = "" + result + ""; Assert.NotEqual("", result);