NLog日志轮换/归档不一致行为

时间:2017-06-01 11:41:15

标签: nlog archiving log-rotation

我有一个使用NLog创建和维护日志文件的项目。这包括使用旧日志文件的日志轮换/归档。但是,我已经看到NLog的归档设置并不总是得到尊重,特别是关于ArchiveEvery配置选项。基于proof on Wikipedia stackoverflow答案,我假设库检查文件的最后写入时间,以检查是否必须存档当前文件并启动新文件,但是直到将新的日志消息传递给库

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

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;

我正在努力让这个工作和#34;正确"。我在括号中写这个,因为我没有很多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的完整路径是搞砸了吗?如果是这样,是否有不同的方法来指定将日志文件放入的特定文件夹?

0 个答案:

没有答案