0

我有一个使用 NLog 创建和维护日志文件的项目。这包括使用日志轮换/归档旧日志文件。但是,我发现 NLog 的归档设置并不总是得到尊重,尤其是关于 ArchiveEvery 配置选项。基于this stackoverflow answer,我假设库检查文件的最后写入时间,以检查它是否必须归档当前文件并启动新文件,但直到有新的日志消息传递给库。

在我的项目中,我将库配置为每分钟存档一次。这应该没问题,因为我的项目每隔几秒钟记录一次消息,并且我希望每分钟都能看到一个存档文件,因为日志消息不断出现。但是,我看到不一致的行为,有时在不同但随后的归档日志文件之间有几分钟的时间。例如,我的磁盘上目前有以下文件:

Filename              | Last write time
----------------------+------------------
Log.01-06-2017.2.csv  | 1-6-2017 10:42
Log.01-06-2017.3.csv  | 1-6-2017 10:44
Log.01-06-2017.4.csv  | 1-6-2017 10:46
Log.01-06-2017.5.csv  | 1-6-2017 10:47
Log.01-06-2017.6.csv  | 1-6-2017 10:48
Log.01-06-2017.7.csv  | 1-6-2017 10:52
Log.01-06-2017.8.csv  | 1-6-2017 11:01
Log.01-06-2017.9.csv  | 1-6-2017 11:04
Log.01-06-2017.20.csv | 1-6-2017 11:43
Log.01-06-2017.csv    | 1-6-2017 11:46

如您所见,归档文件并非每分钟创建一次。至于我目前的 NLog 配置:

fileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
fileTarget.ArchiveEvery = FileArchivePeriod.Minute;
fileTarget.KeepFileOpen = true;
fileTarget.AutoFlush = true;
fileTarget.ArchiveDateFormat = "dd-MM-yyyy";
fileTarget.ArchiveOldFileOnStartup = true;

我正在努力让它“正常”工作。我将其写在括号中,因为我对 NLog 没有太多经验,也不真正了解库的行为方式。我曾希望在 GitHub 上的 NLog wiki 页面上找到更多信息,但在那里我找不到我需要的信息。

编辑

fileTarget.FileName 由一个基本文件夹 (storage.Folder.FullName = "C:\ProgramData\\")、一个子文件夹 (LogFolder = "AuditLog") 和文件名 (LogFileName = "Log.csv") 组成:

fileTarget.FileName = Path.Combine(storage.Folder.FullName, Path.Combine(LogFolder, LogFileName));

fileTarget.ArchiveFileName 没有设置,所以我想它是默认的。难道是为 FileName 指定完整路径搞砸了?如果是这样,是否有不同的方法来指定一个特定的文件夹来放置日志文件?

4

0 回答 0