Ведение журнала из .NET Framework (Logging.On) - PullRequest
2 голосов
/ 06 июля 2010

Я отлаживаю непредвиденное поведение, и, отслеживая .NET Framework, я вижу кучу таких вещей:

        if (Logging.On) { 
            Logging.PrintInfo(Logging.Web, this, SR.GetString(SR.net_log_n_certs_after_filtering, filteredCerts.Count));
             …
        }

Но (как и ожидалось по умолчанию) выполнение выполняется прямо над ними. Есть ли способ включить ведение журнала? Или это просто то, что разработчики фреймворка могут сделать при создании специальных сборок фреймворка?

1 Ответ

5 голосов
/ 06 июля 2010

Отражение вокруг показывает, что Logging.On включен 'flag' в

s_WebTraceSource = new NclTraceSource("System.Net");
s_HttpListenerTraceSource = new NclTraceSource("System.Net.HttpListener");
s_SocketsTraceSource = new NclTraceSource("System.Net.Sockets");
s_CacheTraceSource = new NclTraceSource("System.Net.Cache");
try
{
   flag = ((s_WebTraceSource.Switch.ShouldTrace(TraceEventType.Critical) || s_HttpListenerTraceSource.Switch.ShouldTrace(TraceEventType.Critical)) || s_SocketsTraceSource.Switch.ShouldTrace(TraceEventType.Critical)) || s_CacheTraceSource.Switch.ShouldTrace(TraceEventType.Critical);
}

Это означает, что он использует стандартную трассировку и просто проверяет, наблюдается ли хотя бы уровень «Критический».Пример того, как это использовать, можно найти в разделе «Отладка приложения сокетов» этой статьи MSDN , например:

<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.Net.Sockets">
        <listeners>
          <add name="Sockets"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="System.Net.Sockets" value="31" />
    </switches>
    <sharedListeners>
    <add name="Sockets" type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="Sockets.log"/>
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>
</configuration>

Как поясняется в статье, значения переключателейпобитовое ИЛИ этих пяти значений:

  • Сетевой трафик (0x10)
  • Вход и выход метода (0x8)
  • Предупреждения (0x4)
  • Ошибки (0x2)
  • Критические события (0x1).

Если вы ИЛИ все из них (0x10 | 0x8 | 0x4 | 0x2 | 0x1), вы получите 0x1F, что равно «31» в десятичном виде, как показано выше.

Подробная информация о настройке с использованиемфайл конфигурации приложения можно найти здесь .Это просто вопрос создания файла app.config или web.config, аналогичного приведенному выше для источника (-ов), который вы будете использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...