【发布时间】:2026-02-16 05:30:01
【问题描述】:
在我的项目中,我创建了一个日志系统,它基本上是一个基于 nLog 的外壳。我正在尝试对日志系统的存档功能进行单元测试。目前设置为滚动存档,最大存档文件为 5 个(Nlog 是通过代码设置的,不使用配置文件):
var myFileTarget = new FileTarget();
LogConfig.AddTarget("file", myFileTarget);
myFileTarget.FileName = LogFile;
myFileTarget.Layout = LogFileLayout;
myFileTarget.AutoFlush = true;
//Archive specifics
var token = "{#}";
var archiveFileName = $"{Path.GetFileNameWithoutExtension(LogFile)}.{token}.{Path.GetExtension(LogFile)}";
myFileTarget.ArchiveFileName = archiveFileName;
myFileTarget.ArchiveNumbering = ArchiveNumberingMode.Rolling;
myFileTarget.ArchiveEvery = toFileArchivePeriod(LogStyle);
myFileTarget.EnableFileDelete = true;
myFileTarget.MaxArchiveFiles = TTL; //Time to Live
myFileTarget.DeleteOldFileOnStartup = true;
为了模拟已经存在大量日志,我创建了一系列与上述 ArchiveFileName 结构相同的日志:
LogFileName = "LogTTLDailyTest.log";
LogStyle = "daily";
LogTTL = 5; //Time To Live
//Arrange old filelogs
for (int i = 0; i < 100; i++)
{
var filename = $"LogTTLDailyTest.{i}.log";
File.WriteAllText(TestLogsDirectory + filename, "UNITTEST");
var creationTime = DateTime.Now.AddDays((i + 1)* -1);
File.SetCreationTime(TestLogsDirectory + filename, creationTime);
File.SetLastWriteTime(TestLogsDirectory + filename, creationTime);
}
但是当我通过我的日志系统将日志写入 nlog 时,它看不到我创建的旧日志文件,因此不要删除它们。但是它确实会清理旧的当前日志文件,因此可以删除文件:
NLog: 2017-07-20 12:54:20.7434 Info Closing old configuration.
NLog: 2017-07-20 12:54:20.7434 Info Found 36 configuration items
NLog: 2017-07-20 12:54:20.7594 Info Found 36 configuration items
NLog: 2017-07-20 12:54:26.9157 Info Deleting old archive file: 'C:\<projectpath>\bin\Debug\unittestlogsea984b05-3c33-4142-9d1a-c900bad89006\LogTTLDailyTest.log'.
我目前的理论是,nlog 看到旧日志,但对文件内容有某种验证过程,我只用“UNITTEST”作为内容填充,但我无法“重新启动” nlog 或强制它查看日志。
希望你能帮助我
【问题讨论】:
标签: c# unit-testing nlog