Семантическая регистрация 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 генерирует свое руководство.

Другие вопросы по тегам