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

freeandnil pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4net.git


The following commit(s) were added to refs/heads/master by this push:
     new 1946fed2 #229 added test for multiple logs in 1 millisecond
1946fed2 is described below

commit 1946fed21316d21125aa66ac08979d037cb6894e
Author: Jan Friedrich <[email protected]>
AuthorDate: Tue Feb 11 13:46:33 2025 +0100

    #229 added test for multiple logs in 1 millisecond
---
 src/log4net.Tests/Layout/PatternLayoutTest.cs | 61 ++++++++++++++++++---------
 1 file changed, 41 insertions(+), 20 deletions(-)

diff --git a/src/log4net.Tests/Layout/PatternLayoutTest.cs 
b/src/log4net.Tests/Layout/PatternLayoutTest.cs
index f6ae5c9f..c6ece65b 100644
--- a/src/log4net.Tests/Layout/PatternLayoutTest.cs
+++ b/src/log4net.Tests/Layout/PatternLayoutTest.cs
@@ -18,9 +18,11 @@
 #endregion
 
 using System;
-using System.IO;
+using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
-
+using System.IO;
+using System.Linq;
+using System.Threading;
 using log4net.Config;
 using log4net.Core;
 using log4net.Layout;
@@ -28,10 +30,7 @@
 using log4net.Repository;
 using log4net.Tests.Appender;
 using log4net.Util;
-
 using NUnit.Framework;
-using System.Diagnostics.CodeAnalysis;
-using log4net.Repository.Hierarchy;
 
 namespace log4net.Tests.Layout;
 
@@ -51,17 +50,17 @@ public class PatternLayoutTest
   public void SetUp()
   {
     // set correct thread culture
-    _currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture;
-    _currentUiCulture = System.Threading.Thread.CurrentThread.CurrentUICulture;
-    System.Threading.Thread.CurrentThread.CurrentCulture = 
System.Threading.Thread.CurrentThread.CurrentUICulture = 
System.Globalization.CultureInfo.InvariantCulture;
+    _currentCulture = Thread.CurrentThread.CurrentCulture;
+    _currentUiCulture = Thread.CurrentThread.CurrentUICulture;
+    Thread.CurrentThread.CurrentCulture = 
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
   }
   [TearDown]
   public void TearDown()
   {
     Utils.RemovePropertyFromAllContexts();
     // restore previous culture
-    System.Threading.Thread.CurrentThread.CurrentCulture = _currentCulture!;
-    System.Threading.Thread.CurrentThread.CurrentUICulture = 
_currentUiCulture!;
+    Thread.CurrentThread.CurrentCulture = _currentCulture!;
+    Thread.CurrentThread.CurrentUICulture = _currentUiCulture!;
   }
 
   protected virtual PatternLayout NewPatternLayout() => new();
@@ -79,7 +78,7 @@ public void TestThreadPropertiesPattern()
     ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());
     BasicConfigurator.Configure(rep, stringAppender);
 
-    ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadProperiesPattern");
+    ILog log1 = LogManager.GetLogger(rep.Name, 
nameof(TestThreadPropertiesPattern));
 
     log1.Info("TestMessage");
     Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), 
"Test no thread properties value set");
@@ -127,7 +126,7 @@ public void TestGlobalPropertiesPattern()
     ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());
     BasicConfigurator.Configure(rep, stringAppender);
 
-    ILog log1 = LogManager.GetLogger(rep.Name, "TestGlobalProperiesPattern");
+    ILog log1 = LogManager.GetLogger(rep.Name, 
nameof(TestGlobalPropertiesPattern));
 
     log1.Info("TestMessage");
     Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), 
"Test no global properties value set");
@@ -152,8 +151,8 @@ public void TestAddingCustomPattern()
     StringAppender stringAppender = new();
     PatternLayout layout = NewPatternLayout();
 
-    layout.AddConverter("TestAddingCustomPattern", 
typeof(TestMessagePatternConverter));
-    layout.ConversionPattern = "%TestAddingCustomPattern";
+    layout.AddConverter(nameof(TestAddingCustomPattern), 
typeof(TestMessagePatternConverter));
+    layout.ConversionPattern = "%" + nameof(TestAddingCustomPattern);
     layout.ActivateOptions();
 
     stringAppender.Layout = layout;
@@ -161,7 +160,7 @@ public void TestAddingCustomPattern()
     ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());
     BasicConfigurator.Configure(rep, stringAppender);
 
-    ILog log1 = LogManager.GetLogger(rep.Name, "TestAddingCustomPattern");
+    ILog log1 = LogManager.GetLogger(rep.Name, 
nameof(TestAddingCustomPattern));
 
     log1.Info("TestMessage");
     Assert.That(stringAppender.GetString(), Is.EqualTo("TestMessage"), 
"%TestAddingCustomPattern not registered");
@@ -179,7 +178,7 @@ public void 
NamedPatternConverterWithoutPrecisionShouldReturnFullName()
     stringAppender.Layout = layout;
     ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());
     BasicConfigurator.Configure(rep, stringAppender);
-    ILog log1 = LogManager.GetLogger(rep.Name, "TestAddingCustomPattern");
+    ILog log1 = LogManager.GetLogger(rep.Name, 
nameof(NamedPatternConverterWithoutPrecisionShouldReturnFullName));
 
     log1.Info("NoDots");
     Assert.That(stringAppender.GetString(), Is.EqualTo("NoDots"), 
"%message-as-name not registered");
@@ -226,7 +225,7 @@ public void 
NamedPatternConverterWithPrecision1ShouldStripLeadingStuffIfPresent(
     stringAppender.Layout = layout;
     ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());
     BasicConfigurator.Configure(rep, stringAppender);
-    ILog log1 = LogManager.GetLogger(rep.Name, "TestAddingCustomPattern");
+    ILog log1 = LogManager.GetLogger(rep.Name, 
nameof(NamedPatternConverterWithPrecision1ShouldStripLeadingStuffIfPresent));
 
     log1.Info("NoDots");
     Assert.That(stringAppender.GetString(), Is.EqualTo("NoDots"), 
"%message-as-name not registered");
@@ -273,7 +272,7 @@ public void 
NamedPatternConverterWithPrecision2ShouldStripLessLeadingStuffIfPres
     stringAppender.Layout = layout;
     ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());
     BasicConfigurator.Configure(rep, stringAppender);
-    ILog log1 = LogManager.GetLogger(rep.Name, "TestAddingCustomPattern");
+    ILog log1 = LogManager.GetLogger(rep.Name, 
nameof(NamedPatternConverterWithPrecision2ShouldStripLessLeadingStuffIfPresent));
 
     log1.Info("NoDots");
     Assert.That(stringAppender.GetString(), Is.EqualTo("NoDots"), 
"%message-as-name not registered");
@@ -334,7 +333,7 @@ public void TestExceptionPattern()
     ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());
     BasicConfigurator.Configure(rep, stringAppender);
 
-    ILog log1 = LogManager.GetLogger(rep.Name, "TestExceptionPattern");
+    ILog log1 = LogManager.GetLogger(rep.Name, nameof(TestExceptionPattern));
 
     InvalidOperationException exception = new("Oh no!");
     log1.Info("TestMessage", exception);
@@ -355,11 +354,33 @@ public void ConvertMicrosecondsPatternTest()
     ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());
     BasicConfigurator.Configure(rep, stringAppender);
 
-    ILog logger = LogManager.GetLogger(rep.Name, "TestThreadProperiesPattern");
+    ILog logger = LogManager.GetLogger(rep.Name, 
nameof(ConvertMicrosecondsPatternTest));
 
     logger.Logger.Log(new(new() { TimeStampUtc = new(2025, 02, 10, 13, 01, 02, 
123, 456, DateTimeKind.Utc), Message = "test", Level = Level.Info }));
     Assert.That(stringAppender.GetString(), Is.EqualTo("20250210 
13:01:02.123456"));
   }
+
+  [Test]
+  public void ConvertMultipleMicrosecondsPatternTest()
+  {
+    StringAppender stringAppender = new()
+    {
+      Layout = NewPatternLayout("[%date{yyyyMMdd HH:mm:ss.ffffff}] [%-5level] 
[%thread] - %message%newline")
+    };
+
+    ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());
+    BasicConfigurator.Configure(rep, stringAppender);
+
+    ILog logger = LogManager.GetLogger(rep.Name, 
nameof(ConvertMultipleMicrosecondsPatternTest));
+
+    for (int i = 0; i < 100; i++)
+    {
+      logger.Info(null);
+      Thread.Sleep(1);
+    }
+    string[] lines = stringAppender.GetString().Split('\n');
+    Assert.That(lines, Has.Length.EqualTo(lines.Distinct().Count()), "no 
duplicate timestamps allowed");
+  }
 #endif
 
   [SuppressMessage("Microsoft.Performance", 
"CA1812:AvoidUninstantiatedInternalClasses", Justification = "Reflection")]

Reply via email to