In meinem Projekt habe ich ein Logging-System erstellt, die im Grunde eine Shell auf nLlog ist. Ich versuche die Archivierungsfunktion des Logging-Systems zu vereinen. Es ist derzeit Setup zu tun Archive mit max Archivdateien von 5 (Nlog ist Setup über Code, keine Konfigurationsdatei verwendet wird) walzenUntitleding Nlog Archiv-Funktion
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;
zu simulieren, dass viele Protokolle bereits vorhanden ist, ich eine Reihe erstellen von Protokollen mit dem gleichen Aufbau wie die ArchiveFileName oben:
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);
}
Aber wenn ich ein Protokoll schreibe über mein Log-System nlog ist es nicht die alten Protokolldateien sieht ich erstellt und daher löscht sie nicht. Es ist sauber aber die alte aktuelle Protokolldatei, also das Löschen von Dateien arbeiten:
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'.
Meine aktuelle Theorie ist, dass der nlog der alten Protokolle sieht aber eine Art von Validierung der Inhalte der Dateien, die ich nur füllen Sie mit "UNITEST" als Inhalt, aber ich war nicht in der Lage, nlog "neu zu starten" oder zwingen Sie es, die Protokolle zu sehen.
Hoffe, dass Sie mich