Skip to content

Commit 48ef9aa

Browse files
committed
Add additional tests, fix the restart bug and roll back test-focused changes from #232
1 parent c3b83ec commit 48ef9aa

File tree

7 files changed

+125
-42
lines changed

7 files changed

+125
-42
lines changed

src/log4net.Tests/Appender/RollingFileAppenderWithDirTest.cs

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/log4net.Tests/Integration/Log4NetIntegrationTests.cs

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public void SetUp()
2020
filesFromPreviousRuns.ForEach(File.Delete);
2121
var directoriesFromPreviousRuns =
2222
Directory.EnumerateDirectories(TestContext.CurrentContext.TestDirectory)
23-
.Where(dirPath => Path.GetDirectoryName(dirPath)?.StartsWith("integrationTestLogDir", StringComparison.InvariantCultureIgnoreCase) == true)
23+
.Where(dirPath => Path.GetFileName(dirPath).StartsWith("integrationTestLogDir", StringComparison.InvariantCultureIgnoreCase))
2424
.ToList();
2525
directoriesFromPreviousRuns.ForEach(d => Directory.Delete(d, true));
2626
}
@@ -79,10 +79,10 @@ public void Log4Net_WritesLogFile_AndContentIsCorrectAfterRestart()
7979
[Test]
8080
public void Log4Net_WritesLogFile_WithRollAndNoAppend_AndContentIsCorrectAfterRestart()
8181
{
82-
for (int i = 0; i < 10; i++)
82+
for (int i = 0; i < 20; i++)
8383
{
8484
// Arrange: configure log4net from config file
85-
var config = "log4net.roll.config.xml";
85+
var config = "log4net.roll.config";
8686
string configPath = Path.Combine(TestContext.CurrentContext.TestDirectory, "Integration", config);
8787
var repo = LogManager.CreateRepository(Guid.NewGuid().ToString());
8888
XmlConfigurator.Configure(repo, new FileInfo(configPath));
@@ -98,7 +98,66 @@ public void Log4Net_WritesLogFile_WithRollAndNoAppend_AndContentIsCorrectAfterRe
9898

9999
// Assert: log file exists and contains expected content
100100
string[] logFiles = Directory.GetFiles("integrationTestLogDir_1");
101-
Assert.That(logFiles.Length, Is.EqualTo(10));
101+
Assert.That(logFiles.Length, Is.EqualTo(12+1));
102+
}
103+
104+
[Test]
105+
public void Log4Net_WritesLogFile_WithMaxSizeRoll_Config_Works()
106+
{
107+
var logDir = Path.Combine(TestContext.CurrentContext.TestDirectory, "integrationTestLogDir_maxsizeroll");
108+
if (Directory.Exists(logDir)) Directory.Delete(logDir, true);
109+
Directory.CreateDirectory(logDir);
110+
var config = "log4net.maxsizeroll.config";
111+
string configPath = Path.Combine(TestContext.CurrentContext.TestDirectory, "Integration", config);
112+
var repo = LogManager.CreateRepository(Guid.NewGuid().ToString());
113+
log4net.Config.XmlConfigurator.Configure(repo, new FileInfo(configPath));
114+
var log = LogManager.GetLogger(repo.Name, "log");
115+
// Write enough lines to trigger rolling
116+
for (int i = 0; i < 1000; ++i)
117+
{
118+
log.Info($"Log entry {i}");
119+
}
120+
repo.Shutdown();
121+
// Assert: rolled files exist
122+
string[] logFiles = Directory.GetFiles(logDir, "*.log");
123+
Assert.That(logFiles.Length, Is.EqualTo(4)); // 1 current + 3 backups
124+
// Optionally, check that each file is <= 10KB
125+
foreach (var file in logFiles) Assert.That(new FileInfo(file).Length, Is.LessThanOrEqualTo(10*1024 +100));
126+
}
127+
128+
[Test]
129+
public void Log4Net_WritesLogFile_WithDateAndSizeRoll_Config_Works()
130+
{
131+
var logDir = Path.Combine(TestContext.CurrentContext.TestDirectory, "integrationTestLogDir_maxsizerolldate");
132+
if (Directory.Exists(logDir)) Directory.Delete(logDir, true);
133+
Directory.CreateDirectory(logDir);
134+
var config = "log4net.maxsizeroll_date.config";
135+
string configPath = Path.Combine(TestContext.CurrentContext.TestDirectory, "Integration", config);
136+
var repo = LogManager.CreateRepository(Guid.NewGuid().ToString());
137+
log4net.Config.XmlConfigurator.Configure(repo, new FileInfo(configPath));
138+
var log = LogManager.GetLogger(repo.Name, "log");
139+
// Write enough lines to trigger rolling by size and date
140+
for (int i = 1; i < 10000; ++i)
141+
{
142+
log.Debug($"DateRoll entry {i}");
143+
if (i % 5000 == 0) System.Threading.Thread.Sleep(TimeSpan.FromMinutes(1)); // allow time for date to change if needed
144+
}
145+
repo.Shutdown();
146+
// Assert: rolled files exist (date+size pattern)
147+
string[] logFiles = Directory.GetFiles(logDir, "*.log");
148+
Assert.That(logFiles.Length, Is.EqualTo(8));
149+
// Group files by date part in the filename (yyyy-MM-dd-mm)
150+
var dateGroups = logFiles
151+
.Select(f => Path.GetFileNameWithoutExtension(f))
152+
.Select(name => name.Split('.').First())
153+
.GroupBy(date => date)
154+
.ToDictionary(g => g.Key, g => g.Count());
155+
// Assert that at least one group exists and print group counts
156+
Assert.That(dateGroups.Count, Is.EqualTo(2));
157+
foreach (var group in dateGroups)
158+
{
159+
TestContext.WriteLine($"Date group: {group.Key}, file count: {group.Value}");
160+
}
102161
}
103162
}
104163
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<configuration>
3+
<log4net>
4+
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
5+
<param name="File" value="integrationTestLogDir_maxsizeroll\.log" />
6+
<param name="AppendToFile" value="true" />
7+
<param name="RollingStyle" value="Composite" />
8+
<param name="DatePattern" value="yyyy-MM-dd" />
9+
<param name="MaximumFileSize" value="10KB" />
10+
<param name="MaxSizeRollBackups" value="3" />
11+
<param name="StaticLogFileName" value="false" />
12+
<param name="CountDirection" value="1" />
13+
<param name="PreserveLogFileNameExtension" value="true"/>
14+
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
15+
<layout type="log4net.Layout.PatternLayout">
16+
<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss.fff} [%-5p] %m (%M)%n"/>
17+
</layout>
18+
</appender>
19+
20+
<logger name="log">
21+
<level value="debug" />
22+
<appender-ref ref="LogFileAppender" />
23+
</logger>
24+
</log4net>
25+
</configuration>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<configuration>
3+
<log4net>
4+
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
5+
<param name="File" value="integrationTestLogDir_maxsizerolldate\.log" />
6+
<param name="AppendToFile" value="true" />
7+
<param name="RollingStyle" value="Composite" />
8+
<param name="DatePattern" value="yyyy-MM-dd-mm" />
9+
<param name="MaximumFileSize" value="10KB" />
10+
<param name="MaxSizeRollBackups" value="3" />
11+
<param name="StaticLogFileName" value="false" />
12+
<param name="CountDirection" value="1" />
13+
<param name="PreserveLogFileNameExtension" value="true"/>
14+
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
15+
<layout type="log4net.Layout.PatternLayout">
16+
<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss.fff} [%-5p] %m (%M)%n"/>
17+
</layout>
18+
</appender>
19+
20+
<logger name="log">
21+
<level value="debug" />
22+
<appender-ref ref="LogFileAppender" />
23+
</logger>
24+
</log4net>
25+
</configuration>

src/log4net.Tests/Integration/log4net.roll.config.xml renamed to src/log4net.Tests/Integration/log4net.roll.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<param name="AppendToFile" value="false"/>
1313
<rollingStyle value="Size"/>
1414
<maximumFileSize value="1MB"/>
15-
<maxSizeRollBackups value="100"/>
15+
<maxSizeRollBackups value="12"/>
1616
<CountDirection value="1"/>
1717
<preserveLogFileNameExtension value="true"/>
1818
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>

src/log4net.Tests/log4net.Tests.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,15 @@
3535
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkPackageVersion)" />
3636
</ItemGroup>
3737
<ItemGroup>
38+
<None Update="Integration\log4net.maxsizeroll.config">
39+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
40+
</None>
41+
<None Update="Integration\log4net.maxsizeroll_date.config">
42+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
43+
</None>
44+
<None Update="Integration\log4net.roll.config">
45+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
46+
</None>
3847
<None Update="Integration\log4net.roll.config.xml">
3948
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
4049
</None>

src/log4net/Appender/RollingFileAppender.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -681,18 +681,16 @@ protected List<string> GetExistingFiles(string baseFilePath)
681681
using (SecurityContext?.Impersonate(this))
682682
{
683683
string fullPath = Path.GetFullPath(baseFilePath);
684-
string dir = Path.GetDirectoryName(baseFilePath);
685684

686685
directory = Path.GetDirectoryName(fullPath);
687686
if (Directory.Exists(directory))
688687
{
689688
string baseFileName = Path.GetFileName(fullPath);
690-
689+
691690
string[] files = Directory.GetFiles(directory, GetWildcardPatternForFile(baseFileName));
692691
result.AddRange(files
693692
.Select(Path.GetFileName)
694-
.Where(curFileName => curFileName.StartsWith(Path.GetFileNameWithoutExtension(baseFileName)))
695-
.Select(file => Path.Combine(dir, file)));
693+
.Where(curFileName => curFileName.StartsWith(Path.GetFileNameWithoutExtension(baseFileName))));
696694
}
697695
}
698696
LogLog.Debug(_declaringType, "Searched for existing files in [" + directory + "]");

0 commit comments

Comments
 (0)