Завершение пользовательского TraceListener с autoflush = 'false' (C #, .net) - PullRequest
2 голосов
/ 18 мая 2009

Я пишу собственный tracelistener для записи сообщений трассировки в файл, добавляющий ротацию (например, меняя имя файла каждый день).
В переопределении метода Flush я вызываю Flush для базового StreamWriter, но если я установил autoflush='false' в конфигурации приложения, Flush не вызывается, когда приложение завершается.

Каков правильный метод для завершения пользовательского прослушивателя трассировки при выходе из приложения?

EDIT: я переопределил метод Dispose(bool disposing), так как базовый класс TraceListener уже реализует одноразовый шаблон, но, насколько я могу сказать, метод не вызывается. Если я реализую явный деструктор, деструктор вызывается, но в этот момент я не должен предполагать, что ссылка на поток все еще действительна, верно?

Ответы [ 3 ]

4 голосов
/ 18 мая 2009

, если ваше программное обеспечение не вызывает Trace.Close по завершении, вы не можете гарантировать, что какая-либо очистка выполнена. Подробнее см. в этой статье .

0 голосов
/ 17 апреля 2015

Вы должны переопределить метод Close в своем пользовательском tracelistener, и Flush и Dispose ваш подстилающий StreamWriter там.

0 голосов
/ 18 мая 2009

Я бы посоветовал вам сделать это в методе dispose вашего пользовательского класса TraceListener непосредственно перед закрытием базового StreamWriter.

...