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 79b57e5e added unit test for #193
79b57e5e is described below

commit 79b57e5eff0fb970a8d51ca35b5bf63e0b90a6df
Author: Jan Friedrich <[email protected]>
AuthorDate: Mon Oct 14 17:52:00 2024 +0200

    added unit test for #193
---
 src/log4net.Tests/Appender/FileAppenderTest.cs | 48 ++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/src/log4net.Tests/Appender/FileAppenderTest.cs 
b/src/log4net.Tests/Appender/FileAppenderTest.cs
index ec25b33c..a36b441a 100644
--- a/src/log4net.Tests/Appender/FileAppenderTest.cs
+++ b/src/log4net.Tests/Appender/FileAppenderTest.cs
@@ -26,6 +26,9 @@ using NUnit.Framework;
 using log4net.Repository;
 using log4net.Config;
 using log4net.Util;
+using log4net.Core;
+using System.IO;
+using System.Linq;
 
 namespace log4net.Tests.Appender;
 
@@ -100,4 +103,49 @@ public sealed class FileAppenderTest
 
     static void LogReceived(object? source, LogReceivedEventArgs e) => 
Assert.Fail(e.LogLog.Message);
   }
+
+  /// <summary>
+  /// Verifies that the <see cref="FileAppender.File"/> property accepts a 
<see cref="PatternString"/> with a <see cref="GlobalContext"/>
+  /// </summary>
+  /// <remarks>see 
https://github.com/apache/logging-log4net/issues/193</remarks>
+  [Test]
+  public void FilenameWithGlobalContextPatternStringTest()
+  {
+    DirectoryInfo logs = new("./Logs");
+    if (logs.Exists)
+    {
+      logs.Delete(true);
+    }
+
+    XmlDocument log4netConfig = new();
+    log4netConfig.LoadXml("""
+  <log4net>
+    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
+      <layout type="log4net.Layout.PatternLayout">
+        <conversionPattern value="%date{ABSOLUTE} [%logger] %level - 
%message%newline%exception"/>
+      </layout>
+    </appender>
+    <appender name="GeneralFileAppender" type="log4net.Appender.FileAppender">
+      <file type="log4net.Util.PatternString" 
value="Logs\file_%property{LogName}_%date{yyyyMMddHHmmss}.Log"/>
+      <appendToFile value="true"/>
+      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
+      <layout type="log4net.Layout.PatternLayout">
+        <conversionPattern value="%date{ABSOLUTE} [%logger] %level - 
%message%newline%exception"/>
+      </layout>
+    </appender>
+    <root>
+      <level value="INFO"/>
+      <appender-ref ref="GeneralFileAppender"/>
+    </root>
+  </log4net>
+""");
+    ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());
+    // latest possible moment to set GlobalContext property used in filename
+    GlobalContext.Properties["LogName"] = "custom_log_issue_193";
+    XmlConfigurator.Configure(rep, log4netConfig["log4net"]!);
+    ILogger logger = 
rep.GetLogger(nameof(FilenameWithGlobalContextPatternStringTest));
+    logger.Log(GetType(), Level.Info, 
nameof(FilenameWithGlobalContextPatternStringTest), null);
+    logs.Refresh();
+    Assert.IsTrue(logs.GetFiles().Any(file => 
file.Name.StartsWith("file_custom_log_issue_193")));
+  }
 }
\ No newline at end of file

Reply via email to