Skip to content

Commit 79b57e5

Browse files
committed
added unit test for #193
1 parent bba60f4 commit 79b57e5

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

src/log4net.Tests/Appender/FileAppenderTest.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
using log4net.Repository;
2727
using log4net.Config;
2828
using log4net.Util;
29+
using log4net.Core;
30+
using System.IO;
31+
using System.Linq;
2932

3033
namespace log4net.Tests.Appender;
3134

@@ -100,4 +103,49 @@ public void FilenameWithPatternStringTest()
100103

101104
static void LogReceived(object? source, LogReceivedEventArgs e) => Assert.Fail(e.LogLog.Message);
102105
}
106+
107+
/// <summary>
108+
/// Verifies that the <see cref="FileAppender.File"/> property accepts a <see cref="PatternString"/> with a <see cref="GlobalContext"/>
109+
/// </summary>
110+
/// <remarks>see https://github.com/apache/logging-log4net/issues/193</remarks>
111+
[Test]
112+
public void FilenameWithGlobalContextPatternStringTest()
113+
{
114+
DirectoryInfo logs = new("./Logs");
115+
if (logs.Exists)
116+
{
117+
logs.Delete(true);
118+
}
119+
120+
XmlDocument log4netConfig = new();
121+
log4netConfig.LoadXml("""
122+
<log4net>
123+
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
124+
<layout type="log4net.Layout.PatternLayout">
125+
<conversionPattern value="%date{ABSOLUTE} [%logger] %level - %message%newline%exception"/>
126+
</layout>
127+
</appender>
128+
<appender name="GeneralFileAppender" type="log4net.Appender.FileAppender">
129+
<file type="log4net.Util.PatternString" value="Logs\file_%property{LogName}_%date{yyyyMMddHHmmss}.Log"/>
130+
<appendToFile value="true"/>
131+
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
132+
<layout type="log4net.Layout.PatternLayout">
133+
<conversionPattern value="%date{ABSOLUTE} [%logger] %level - %message%newline%exception"/>
134+
</layout>
135+
</appender>
136+
<root>
137+
<level value="INFO"/>
138+
<appender-ref ref="GeneralFileAppender"/>
139+
</root>
140+
</log4net>
141+
""");
142+
ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
143+
// latest possible moment to set GlobalContext property used in filename
144+
GlobalContext.Properties["LogName"] = "custom_log_issue_193";
145+
XmlConfigurator.Configure(rep, log4netConfig["log4net"]!);
146+
ILogger logger = rep.GetLogger(nameof(FilenameWithGlobalContextPatternStringTest));
147+
logger.Log(GetType(), Level.Info, nameof(FilenameWithGlobalContextPatternStringTest), null);
148+
logs.Refresh();
149+
Assert.IsTrue(logs.GetFiles().Any(file => file.Name.StartsWith("file_custom_log_issue_193")));
150+
}
103151
}

0 commit comments

Comments
 (0)