Как определить пользовательский TraceListener в app.config
Я внедрил пользовательский прослушиватель трассировки (производный от TextWriteTraceListener
), и теперь я хотел бы настроить мое приложение на его использование вместо стандартного TextWriteTraceListener
.
Сначала я добавил значение по умолчанию TextWriteTraceListener
, чтобы убедиться, что он работает нормально, и он делает это. Здесь мой app.config:
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="TextListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="trace.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Теперь мой прослушиватель трасс определяется в пространстве имен MyApp.Utils
и называется FormattedTextWriterTraceListener
. Поэтому я изменил тип в приведенной выше конфигурации на MyApp.Utils.FormattedTextWriterTraceListener
, и в настоящее время он выглядит следующим образом:
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="MyTextListener" type="MyApp.Utils.FormattedTextWriterTraceListener" initializeData="trace.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Однако теперь, когда я пытаюсь записать что-то, я получаю сообщение ConfigurationErrorsException
с сообщением:
Не удалось найти тип для класса MyApp.Utils.FormattedTextWriterTraceListener.
Кто-нибудь знает, как я могу настроить этот пользовательский прослушиватель в config, и если это возможно?
Ответы
Ответ 1
Попробуйте указать сборку, например:
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="TextListener"
type="MyApp.Utils.FormattedTextWriterTraceListener, MyApp"
initializeData="trace.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Ответ 2
Я боролся с этим недавно, и на всякий случай это помогает кому-то...
Я знал, что мой тип существует, поэтому я написал следующее:
Assembly assembly = System.Reflection.Assembly.GetAssembly(typeof("yourclassname"));
Type myClassType = assembly.GetType("yournamespace.yourclassname");
В моем случае myClassType.AssemblyQualifiedName содержал строку, которая мне нужна в моем файле app.config в атрибуте type.
Например:
![введите описание изображения здесь]()
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information,ActivityTracing" propagateActivity="true">
<listeners>
<add name="CircularTraceListener" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="CircularTraceListener" type="Microsoft.Samples.ServiceModel.CircularTraceListener, CircularTraceListener, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
initializeData="C:\MyWebService\APILog\CircularTracing-service.svclog" maxFileSizeKB="1000" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>