Пользовательский TraceListener, который архивирует пролонгированные журналы
Я хочу реализовать собственный класс TraceListener, который записывает E2ETraceEvent в циклические файлы на основе метки времени. Я нашел отличную библиотеку, которая делает именно то, что я хочу здесь: https://github.com/sgryphon/essential-diagnostics/blob/develop/src/Essential.Diagnostics.RollingXmlTraceListener/Diagnostics/RollingXmlTraceListener.cs
Однако у меня есть еще одно требование архивировать файлы журналов в zipfile всякий раз, когда он переносится на новый файл. Одним из очевидных решений этого является создание производного класса RollingXmlTraceListener и переопределение его конструктора в нечто вроде:
// базовый конструктор здесь: https://github.com/sgryphon/essential-diagnostics/blob/develop/src/Essential.Diagnostics.RollingXmlTraceListener/Diagnostics/RollingXmlTraceListener.cs#L58
public class ArchivingAndRollingXmlListener: RollingXmlTraceListener {
public ArchivingAndRollingXmlListener(string filePathTemplate): base(filePathTemplate)
{
if (string.IsNullOrEmpty(filePathTemplate))
{
// look for all non-zip files that aren't named filePathTemplate in the parent directory of filePathTemplate and zip them up
}
}
}
Существует ли более элегантное решение? Предоставляет ли API-интерфейс диагностики.NET какой-либо тип "скользящего" события?