Включение и выключение трассировки и указание пути к файлу во время выполнения

Меня интересует следующее:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="logger" type="System.Diagnostics.TextWriterTraceListener"
             initializeData="LoggingFile.txt" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

Я хочу включить в свое решение возможность регистрации сообщений об ошибках и трассировки стека. Но мне нужно иметь возможность включать и выключать это. Возможно ли это, закомментировав все в System.Diagnostics? Или есть лучший способ?

Можно ли указать, в какой файл записывает регистратор во время выполнения?


person Hans Rudel    schedule 13.09.2012    source источник
comment
Я понимаю, что ответ на этот вопрос был давным-давно, но я чувствую, что на реальный вопрос о том, как отключить трассировку во время выполнения, не было четкого ответа. Самый простой способ — добавить в конфиг переключатель (в примере ответа SourceSwitch), вручную изменив его значение на Off и затем перезапустив приложение или вызвав Trace.Refresh в коде.   -  person Sheridan    schedule 13.03.2016


Ответы (1)


Вы можете использовать SourceSwitch, который позволяет вам отслеживать различные уровни сообщений. Сначала начните с добавления некоторых настроек в app.config

<system.diagnostics>
  <sources>
    <source name="TraceTest" switchName="SourceSwitch"
            switchType="System.Diagnostics.SourceSwitch">
      <listeners>
            <!-- choose one or use multiple TraceListeners -->
            <add name="console" type="System.Diagnostics.ConsoleTraceListener"
                 initializeData="false"/>
            <add name="file" type="System.Diagnostics.TextWriterTraceListener"
                 initializeData="error.log"/>
            <remove name ="Default"/>
      </listeners>
    </source>
   </sources>
   <switches>
    <!--  MSDN: 4 verbose Information, Information 3, Warning 2, Error 1, -->
    <add name="SourceSwitch" value="Error"/>
  </switches>
  <trace autoflush="true" indentsize="4"/>
</system.diagnostics>

В приложении вы можете отслеживать сообщения с помощью TraceSource. объект, ссылающийся на определенное имя в app.config

TraceSource ts = new TraceSource("TraceTest");
ts.TraceEvent(TraceEventType.Information, 123, "event info");
ts.TraceEvent(TraceEventType.Error, 123, "event error");
ts.TraceEvent(TraceEventType.Warning, 123, "event warning");

ts.TraceInformation("any text");
ts.Flush();
ts.Close();

Для получения общей информации см. Как: использовать TraceSource.. . в MSDN. Используя Dr. Google, я нашел связанный вопрос на SO ссылка на очень хороший пост в блоге< /strong> по этому поводу.

Одно хочу отметить...

Чтобы изменить уровень, на котором прослушиватель записывает сообщение трассировки

Файл конфигурации инициализирует параметры источника трассировки во время инициализации приложения. Чтобы изменить эти параметры, необходимо изменить файл конфигурации и перезапустить приложение или программно обновить приложение с помощью метода TraceRefresh. Приложение может динамически изменять свойства, установленные в файле конфигурации, чтобы переопределить любые параметры, заданные пользователем. Например, вы можете захотеть, чтобы критические сообщения всегда отправлялись в текстовый файл, независимо от текущих параметров конфигурации.

person Pilgerstorfer Franz    schedule 13.09.2012
comment
Большое спасибо за ваш ответ. Вы не упомянули, как это можно включить / выключить, но это может быть в одной из ссылок, которые вы включили, поэтому я все же отметил ваш ответ как выбранный ответ. Будет возиться с тем, что вы упомянули выше, и посмотрим, смогу ли я справиться с этим. В очередной раз благодарим за помощь. - person Hans Rudel; 13.09.2012