.net 使用NLog C#归档后删除日志文件

h7appiyu  于 2023-02-06  发布在  .NET
关注(0)|答案(2)|浏览(394)

我想定期(每小时)将日志文件从“Logs”文件夹归档到“Archive”文件夹,然后立即从“Logs”文件夹中删除这些归档文件。
目前,我正在使用下面的c#代码进行归档,但是我没有看到想要的输出。我们使用的是Nlog版本4.7.11。

target.FileName = @"C:\Logs\Log-${date:format=yyyy-MM-dd-hh}.log";
target.ArchiveFileName = @"C:\Archives\Log-${date:format=yyyy-MM-dd-hh}.log";
target.ArchiveEvery = FileArchivePeriod.Hour;
target.ArchiveOldFileOnStartup = true;
target.DeleteOldFileOnStartup = true;
target.MaxArchiveDays = 10;
target.ArchiveNumbering = ArchiveNumberingMode.Date;
target.MaxArchiveFiles = 50;
target.ArchiveDateFormat = "yyyy-mmm-dd hh-mm";
target.EnableArchiveFileCompression = true;
sbtkgmzw

sbtkgmzw1#

您可以扩展您的NLog方法,在日志记录后运行某个方法,请参见:https://github.com/NLog/NLog/wiki/MethodCall-target.
方法调用目标:Calls the specified static method on each log message and passes contextual parameters to it.
您可以创建一些使用System.IO的代码,以便根据需要移动和归档代码。

kmpatx3s

kmpatx3s2#

NLog支持2种文件归档模式:

  • 静态文件名归档模式,其中ArchiveEvery控制何时滚动。
  • 动态文件名归档模式,其中FileName包含${date}${shortdate}(自动滚动)

NLog不支持混合使用这两种文件归档模式。如果您希望将文件移动到归档文件夹中,则必须使用静态文件名:

target.FileName = @"C:\Logs\App.log";
target.ArchiveFileName = @"C:\Archives\App-{#}.log.zip";
target.ArchiveEvery = FileArchivePeriod.Hour;
target.ArchiveOldFileOnStartup = true;
target.DeleteOldFileOnStartup = true;
target.MaxArchiveDays = 10;
target.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
target.MaxArchiveFiles = 50;
target.ArchiveDateFormat = "yyyy-MM-dd-hh";
target.EnableArchiveFileCompression = true;

或者,您可以使用动态存档模式,然后使用scheduled-task/cron-job将日志文件压缩/移动到所需的位置:

target.FileName = @"C:\Logs\Log-${date:format=yyyy-MM-dd-hh}.log";
target.ArchiveOldFileOnStartup = true;
target.MaxArchiveDays = 10;
target.MaxArchiveFiles = 50;

另请参见不要混合动态和静态归档模式

相关问题