This is an automated email from the ASF dual-hosted git repository.

freeandnil pushed a commit to branch Feature/225-XmlLayoutSchemaLog4JTest-3.x
in repository https://gitbox.apache.org/repos/asf/logging-log4net.git

commit df3b801b2e94fd9ca6f26e1bfd86545c5072162b
Author: Jan Friedrich <[email protected]>
AuthorDate: Tue Feb 4 11:03:11 2025 +0100

    fix regression from 3.0.0 (log4j:data instead of log4j:throwable)
    fixes #225
---
 .../Layout/XmlLayoutSchemaLog4jTest.cs             | 67 ++++++++++++++++++++++
 src/log4net/Layout/XmlLayoutSchemaLog4j.cs         |  2 +-
 2 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/src/log4net.Tests/Layout/XmlLayoutSchemaLog4jTest.cs 
b/src/log4net.Tests/Layout/XmlLayoutSchemaLog4jTest.cs
new file mode 100644
index 00000000..d7d14de0
--- /dev/null
+++ b/src/log4net.Tests/Layout/XmlLayoutSchemaLog4jTest.cs
@@ -0,0 +1,67 @@
+#region Apache License
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more 
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership. 
+// The ASF licenses this file to you under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with 
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#endregion
+
+using System;
+
+using log4net.Config;
+using log4net.Layout;
+using log4net.Repository;
+using log4net.Tests.Appender;
+
+using NUnit.Framework;
+
+namespace log4net.Tests.Layout
+{
+  /// <summary>
+  /// Tests for <see cref="XmlLayoutSchemaLog4J"/>
+  /// </summary>
+  [TestFixture]
+  public class XmlLayoutSchemaLog4JTest
+  {
+    /// <summary>
+    /// Tests a regression from 3.0.0 (log4j:data instead of log4j:throwable)
+    /// </summary>
+    [Test]
+    public void LogExceptionTest()
+    {
+      StringAppender stringAppender = new() { Layout = new 
XmlLayoutSchemaLog4J() };
+
+      ILoggerRepository repository = 
LogManager.CreateRepository(Guid.NewGuid().ToString());
+      BasicConfigurator.Configure(repository, stringAppender);
+      ILog log = LogManager.GetLogger(repository.Name, "TestLogger");
+      
+      ThrowAndLog(42);
+
+      string logEventXml = stringAppender.GetString();
+      Assert.That(logEventXml, Does.Contain("log4j:throwable"));
+      
+      void ThrowAndLog(int foo)
+      {
+        try
+        {
+          throw new TimeoutException();
+        }
+        catch (TimeoutException ex)
+        {
+          log.Error($"Error {foo}", ex);
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/log4net/Layout/XmlLayoutSchemaLog4j.cs 
b/src/log4net/Layout/XmlLayoutSchemaLog4j.cs
index 4d770f79..ff2df82f 100644
--- a/src/log4net/Layout/XmlLayoutSchemaLog4j.cs
+++ b/src/log4net/Layout/XmlLayoutSchemaLog4j.cs
@@ -221,7 +221,7 @@ protected override void FormatXml(XmlWriter writer, 
LoggingEvent loggingEvent)
     if (!string.IsNullOrEmpty(exceptionStr))
     {
       // Append the stack trace line
-      writer.WriteStartElement("log4j:throwable", "log4j", "data", "log4net");
+      writer.WriteStartElement("log4j:throwable", "log4j", "throwable", 
"log4net");
       Transform.WriteEscapedXmlString(writer, exceptionStr!, 
InvalidCharReplacement);
       writer.WriteEndElement();
     }

Reply via email to