Семантическая регистрация IsEnabled si всегда ложно?
Я использую SLAB вне процесса для регистрации событий ETW в моих приложениях.
Сегодня у меня есть проблема в службах WCF, размещенных в WcfTestClient.exe
Когда я помещаю точку останова в методы WriteEvent моего унаследованного класса EventSource, IsEnabled() возвращает false!!! Так что никакое событие не записывается в мой консольный журнал вне процесса:(
При запуске ConsoleEventSink я вижу, что мой eventSource зарегистрирован на уровне LogAlways и имеет значение None для свойства MatchAnyKeyword.
Любая идея, чтобы проверить, что не так для этой проблемы?
заранее спасибо
2 ответа
Возможно, у вас есть ошибка в вашем EventSource
учебный класс.
Вы можете проанализировать свой EventSource, чтобы увидеть, правильно ли он определен. Смотрите https://dzimchuk.net/post/troubleshooting-slab-out-of-process-logging
Для этого есть пакет Nuget: https://www.nuget.org/packages/EnterpriseLibrary.SemanticLogging.EventSourceAnalyzer/
Попробуйте создать для него юнит-тест и проверить результат
[TestClass]
public class EventSourceTests
{
[TestMethod]
public void MyEventSourceShouldBeValid()
{
var analyzer = new EventSourceAnalyzer();
analyzer.Inspect(MyEventSource.Log);
}
}
РЕДАКТИРОВАТЬ
Также доступен (неофициальный) порт для.Net Core, см. Этот пакет.
Регистраторы EventSource и etw фильтруются на основе guid провайдера, уровня события и ключевого слова события. Я не знаком с consoleeventsink, но вы будете получать события только в том случае, если вы специально указали приемнику обратить внимание на вашего конкретного провайдера, обычно давая ему указание провайдера. В вашей системе работают буквально тысячи (возможно, десятки тысяч) провайдеров etw, и вы не можете просто фильтровать по уровню и ключевому слову - вы должны фильтровать и по guid.
Некоторые пользователи etw поддерживают предоставление имени провайдера вместо guid, и в этом случае они генерируют guid путем хеширования имени. Это часто хорошо работает с EventSource, потому что это также способ, которым EventSource генерирует свое руководство.