FileLogTraceListener является распространенным предложением, но он выбрасывает события или выбрасывает исключение, когда файл превышает заданный максимальный размер.
Мы создали класс, который расширяет его и переопределяет методы Write / WriteLine.
Существует try/catch (InvalidOperationException)
, и если это произойдет, мы вызываем base.Close
и переименовываем файл (FullLogFileName
) следующим образом (нам нужен base.Close
, иначе мы получим ошибку «файл используется» ):
В цикле мы добавляем число в конец и видим, существует ли этот файл; если нет, используйте File.Move(FullLogFileName, newFileWithNumber)
, в противном случае мы будем увеличивать число до тех пор, пока не найдем имя файла, которое работает. Также есть блокировка, гарантирующая, что данный экземпляр является потокобезопасным.