У меня есть приложение, в котором я использую TraceListener для сбора данных/информации об отладке во время выполнения приложения. Существует более одного прослушивателя одновременно, один из них будет записывать информацию трассировки в файл на диске, другой может собирать в строку (на короткий период выполнения), а затем она будет отображаться пользователю или может быть сохранена в другой файл как по потребностям.
Все прошло хорошо, если только мы не решили что-то еще.
У нас было много плагинов, которые загружались во время выполнения и выполнялись. Однако проблема заключалась в том, что было сложно заменить подключаемую DLL, поскольку она использовалась приложением, поэтому нам пришлось остановить и заменить DLL, а затем запустить ее снова. Мы решили использовать appDomain для загрузки плагина, чтобы мы могли легко заменить DLL без перезапуска приложений. Это тоже прошло хорошо, но возникла одна серьезная проблема: прослушиватели трассировки были слепы. Поскольку плагины загружаются в другой домен приложения, поэтому трассировки никогда не достигали родительского домена приложения, который его прослушивал (трассировки, сделанные плагином, который загружается в новый домен приложения).
Наш прослушиватель трассировки выглядит так.
Public Class StringTraceListener
Inherits TextWriterTraceListener
Dim sw As System.Text.StringBuilder = Nothing
Public Overrides Sub WriteLine(ByVal message As String)
Try
MyBase.WriteLine(message)
sw.AppendLine(Now.ToString & " : " & message)
Catch ex As Exception
'Do not write anything here... or it might go into recursive loop
End Try
End Sub
Интересно, есть ли способ, которым нам не нужно вносить много изменений, а прослушиватель трассировки может также получать трассировки от плагинов (дочерний домен приложения)? Любая идея будет оценена Спасибо