我有一个使用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的完整路径是搞砸了吗?如果是这样,是否有不同的方法来指定将日志文件放入的特定文件夹?