2017-07-20 58 views
0

私のプロジェクトでは、基本的にはnLogの上にあるシェルであるロギングシステムを作成しました。私はロギングシステムのアーカイブ機能をユニットテストしようとしています。私は範囲を作成し、ログの多くがすでに存在していることをシミュレートするためにユニットテスト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; 

:現在5の最大のアーカイブファイルと転がりアーカイブ(Nlogがコードを経由して設定され、何の設定ファイルが使用されていない)を実行するように設定されています上記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は、古いログを見ているということですが、ファイルの内容の検証プロセスのいくつかの種類を持っているIのみコンテンツとして "UNITTEST"を埋めていますが、nlogを "再起動"するか、強制的にログを見ることができませんでした。

はちょうど私がテストを右に設定していない、あなたはこれがここには問題ではない私

答えて

0

を助けることができると思います。私が忘れたのは、ローリングが削除されないということですが、すべてのファイルの名前を次のローリング番号に変更するだけです。この最後のファイルが削除されます。他のファイルはnlogによって無視されます。私はまた、私の現在のログファイルを1日後に設定するのを忘れていました。これは、nlogが、私が1日でなかった現在のファイルを見たことを意味しました。しかし、私はDeleteOldFileOnStartupを有効にしていたので、そのファイルを削除しました。

私の間違いを修正するために、必要以上の数のファイルを作成し、最新のファイルにローリングナンバーがなく、1日前だったことを確認しました。 DeleteOldFileOnStartupオプションも削除しました。 Nlogは今、私がそれが完璧にやることを期待していることをやっています。

関連する問題