Семантическая регистрация с использованием ETW с пользовательскими ключевыми словами без регистрации

Я пытаюсь использовать.Net 4.5, семантический журнал (SLAB) EventSource, чтобы создавать события с пользовательскими ключевыми словами. Я хотел бы использовать Out-of-Process и использовать ключевые слова для направления событий в лог-файлы или SQL. Я использовал EventSourceAnalyzer против этого класса в отдельном тесте, и никаких исключений.

Я могу "направить" события в разные приемники, используя разные "EventLevel", но я бы предпочел направлять их с помощью пользовательских ключевых слов.

Вот этот класс -

 public class XYZWebLog : EventSource
{
    public class Keywords
    {
        public const EventKeywords Login = (EventKeywords)2;
        public const EventKeywords Billing = (EventKeywords)4;
    }

    [Event(1, Level = EventLevel.Informational, Keywords = Keywords.Login)]
    public void SuccessfulLogin(string loginId) { WriteEvent(1, loginId); }
    [Event(2, Level = EventLevel.Informational, Keywords = Keywords.Login)]
    public void UnSuccessfulLogin(string loginId){ WriteEvent(2, loginId); }

    [Event(3, Level = EventLevel.Informational, Keywords = Keywords.Login)]
    public void Logout(string loginId) { WriteEvent(3, loginId); }

    [Event(4, Level = EventLevel.Informational, Keywords = Keywords.Billing)]
    public void BillAudit(string UserId, string Action, string VisitId, string BillingID, string Details) { WriteEvent(4, UserId, Action, VisitId, BillingID, Details); }

    private static XYZWebLog _log = new XYZWebLog();
    private XYZWebLog() {}
    public static XYZWebLog Log { get { return _log; } }
}

А затем вот конфиг для SemanticLogging-svc.exe:

 <!-- Sinks reference definitons used by this host to listen ETW events -->

<flatFileSink name="svcRuntime" fileName="Billing.log" >
  <sources>


    <eventSource name="XYZWebLog" level="Informational" matchAnyKeyword="4" />
  </sources>

  <eventTextFormatter header="----------"/>
</flatFileSink>

<flatFileSink name="loginLogs" fileName="Login-Logout.log" >
  <sources>
    <eventSource name="XYZWebLog" level="Informational" matchAnyKeyword="2" />
  </sources>
  <eventTextFormatter header="++++++++++"/>
</flatFileSink>

Если я удаляю "matchAnyKeyword" и правильно настраиваю уровни, я могу заставить события переходить в разные файлы - я пробовал "2" и "0x002", и другие вещи вокруг определения пользовательского события, о котором я могу думать, Я искал в Интернете и изучал, какую документацию я мог найти.

1 ответ

Я не знаю много о SLAB. Но я смог использовать ваш пример и генерировать события ETW на основе ключевых слов.

Вот код

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                XYZWebLog.Log.SuccessfulLogin("naveen");
                XYZWebLog.Log.BillAudit("naveen", "bought", "123", "123", "details");

            }
        }
    }

    public class XYZWebLog : EventSource
    {
        public class Keywords
        {
            public const EventKeywords Login = (EventKeywords)2;
            public const EventKeywords Billing = (EventKeywords)4;
        }

        [Event(1, Level = EventLevel.Informational, Keywords = Keywords.Login)]
        public void SuccessfulLogin(string loginId) { WriteEvent(1, loginId); }
        [Event(2, Level = EventLevel.Informational, Keywords = Keywords.Login)]
        public void UnSuccessfulLogin(string loginId) { WriteEvent(2, loginId); }

        [Event(3, Level = EventLevel.Informational, Keywords = Keywords.Login)]
        public void Logout(string loginId) { WriteEvent(3, loginId); }
![enter image description here][1]
        [Event(4, Level = EventLevel.Informational, Keywords = Keywords.Billing)]
        public void BillAudit(string UserId, string Action, string VisitId, string BillingID, string Details)
        {
            WriteEvent(4, UserId, Action, VisitId, BillingID, Details);
        }
        private static XYZWebLog _log = new XYZWebLog();
        private XYZWebLog() { }
        public static XYZWebLog Log { get { return _log; } }
    }
}

Мой инструмент выбора для просмотра и управления событиями ETW - Perfview

Я был в состоянии генерировать события на основе ключевого слова, используя PerfView. Ключевые слова для поставщиков

Если вы заметили в Additional Providers поле я использовал ключевое слово *XYZWebLog:4 что означает, что я хочу фильтровать только Billing События.

И на основании этого параметра генерируются только эти события.

Аудит События

И я изменил настройку на *XYZWebLog:2 и вот мой вывод

Вход События

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