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")]