Семантическая регистрация с использованием 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
и вот мой вывод