System.Diagnostics.Trace ничего не делает, если нет слушателей?

Я хотел бы иметь возможность оставлять трассировку в живой сборке, но только если трассировка NoOp. Это по той же причине, по которой я не хочу спамить журнал событий.

Итак, если я вывожу подробную операционную информацию в методы трассировки, будут ли они на самом деле сохранены\собраны только в том случае, если у меня подключен прослушиватель трассировки?

т.е. они не будут записаны на жесткий диск или сохранены где-то?


person BanksySan    schedule 21.08.2015    source источник


Ответы (1)


MSDN: прослушиватели трассировки:

При использовании Trace, Debug и TraceSource у вас должен быть механизм для сбора и записи отправляемых сообщений. Сообщения трассировки принимаются слушателями. Назначение прослушивателя — собирать, хранить и маршрутизировать сообщения трассировки. Слушатели направляют выходные данные трассировки в соответствующую цель, такую ​​как журнал, окно или текстовый файл.

Поэтому, когда у вас нет слушателей, вывод не будет где-то храниться.

Вы можете сделать это (это рекомендуемый способ настройки трассировка в любом случае) в конфигурации:

<system.diagnostics>
  <trace>
    <listeners>
      <clear/>
    <listeners>
  </trace>
</system.diagnostics>

Или из кода:

System.Diagnostics.Trace.Listeners.Clear();
person CodeCaster    schedule 21.08.2015
comment
Ура, я хотел быть уверен, что кто-то еще интерпретировал это так же. - person BanksySan; 21.08.2015
comment
Кроме того, исходя из этого, было бы безопасно раскрывать конфиденциальные данные с помощью трассировки, поскольку это будет доступно только при подключении трассировщика отладки (при условии, что мы доверяем прослушивателю трассировки и человеку, использующему его). - person BanksySan; 21.08.2015
comment
@ Бэнкси да. System.Net широко использует трассировку, если она включена, вплоть до содержимого пакета, даже при использовании TLS. - person CodeCaster; 21.08.2015