I want to archive log files periodically(for every hour) from "Logs" folder to "Archive" folder and then delete those archived files from "logs" folder immediately. Can we achieve this using NLog?
Currently, I am using the below c# code for archiving, but I am not seeing the desired output. We are using Nlog version 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;
NLog supports 2 file-archive-modes:
ArchiveEvery
controls when to roll.FileName
contains ${date}
or ${shortdate}
(Rolls automatically)NLog does not support mixing these 2 file-archive-modes. If you want files to be moved into the Archive-folder, then you must use static FileName:
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;
Alternative you can use dynamic-archive-mode and then use scheduled-task/cron-job to compress/move log-files to the wanted location:
target.FileName = @"C:\Logs\Log-${date:format=yyyy-MM-dd-hh}.log";
target.ArchiveOldFileOnStartup = true;
target.MaxArchiveDays = 10;
target.MaxArchiveFiles = 50;