Подтвердить что ты не робот

Как определить пользовательский 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, и если это возможно?

4b9b3361

Ответ 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>