Итак, нет способа сделать это только в конфигурации.Моим решением было добавить FileSystemWatcher в выходную папку, и всякий раз, когда там создавался новый файл, я проверял, нужно ли удаление.Я заказал файлы папок перед удалением, поэтому будут удалены только старые файлы (с сохранением текущих и предыдущих файлов журнала).
Код наблюдателя:
try
{
FileSystemWatcher fsw = new FileSystemWatcher(@"C:\ProgramData\Hamoub\Log");
fsw.EnableRaisingEvents = true;
fsw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite |
NotifyFilters.DirectoryName | NotifyFilters.FileName;
fsw.Created += new FileSystemEventHandler(FileCreatedOnLogFolder);
}
catch (Exception ex)
{
Logger.Log("Failed creating file system watcher: " + ex.Message, Severity.Warning);
}
Код обработчика:
void FileCreatedOnLogFolder(object sender, FileSystemEventArgs e)
{
try
{
DirectoryInfo logsDir = new DirectoryInfo(@"C:\ProgramData\Hamoub\Log");
var logFiles = logsDir.GetFiles("*TransferServiceTrace*.log");
var orderedLogFiles = logFiles.OrderBy(e => e.CreationTime);
if (orderedLogFiles.Count() > 1)
{
Logger.Log("Maintenance is needed, More than 2 log files found", Severity.Verbose);
for (int i = 0; i < orderedLogFiles.Count() - 2; i++)
{
try
{
var toDeleteFile = (orderedLogFiles.ElementAt(i) as FileInfo);
if (toDeleteFile != null)
{
toDeleteFile.Delete();
}
}
catch (Exception)
{
Logger.Log("Can't delete log file " + (orderedLogFiles.ElementAt(i) as FileInfo).Name, Severity.Warning);
}
}
// Store last file as TransferService.Last.Log
(orderedLogFiles.ElementAt(orderedLogFiles.Count() - 2) as FileInfo).CopyTo(Path.Combine(logsDir.FullName, "TransferService.Last.Log"), true);
(orderedLogFiles.ElementAt(orderedLogFiles.Count() - 2) as FileInfo).Delete();
}
}
catch (Exception ex)
{
Logger.Log("Error during folder maintenance. " + ex.Message, Severity.Warning);
}
}
Надеюсь, этоПост поможет тому, кто ищет такое решение
Барак Хаму