2015-12-02 7 views
1

Из документации MSDN Write-event поддерживает только типы параметров int и string. Я хочу передать созданный пользователем ct в Write-event, как получить эту функциональность? Каким будет правильный сериализатор для достижения этой функциональности?Как сериализовать определенные пользователем объекты в WriteEvent?

+1

Xml, Json, custom и т. Д. Правильный сериализатор зависит от того, что вы намерены делать с данными при его выписывании и как вы собираетесь его читать (человек или код). –

ответ

0

В Windows 10 (также портированном для Win7/8.1) есть поддержка Rich Payload Data поскольку .Net 4.6:

// define a ‘plain old data’ class 
    [EventData] 
    class SimpleData { 
     public string Name { get; set; } 
     public int Address { get; set; } 
    } 

    [EventSource(Name = "Samples-EventSourceDemos-RuntimeDemo")] 
    public sealed class RuntimeDemoEventSource : EventSource 
    { 
     // define the singleton instance of the event source 
     public static RuntimeDemoEventSource Log = new RuntimeDemoEventSource(); 

     // Rich payloads only work when the self-describing format 
     private RuntimeDemoEventSource() : base(EventSourceSettings.EtwSelfDescribingEventFormat) { } 

     // define a new event. 
     public void LogSimpleData(string message, SimpleData data) { WriteEvent(1, message, data); } 
    } 

RuntimeDemoEventSource.Log.LogSimpleData(
     "testMessage", 
     new SimpleData() { Name = "aName", Address = 234 }); 

Читать блог и документ для получения более подробной информации.

2

Есть несколько вариантов:

  • Использование the new .NET 4.6 feature в качестве magicandre1981 предложил. И это предпочтительный вариант, если вы не должны использовать .NET 4.5, 4.0 или даже 3.5.
  • вручную сериализации их в формате JSON или Bond или т.д.
  • вручную создать EventData-структуру и перейти к WriteEventCore (должен быть внутри unsafe) - TPL в настоящее время использует этот метод.
  • Или вы могли бы this например. Об этом a blog post.
+1

FWIW, Jon Wagner имеет [интересный взнос] (https://github.com/jonwagner/EventSourceProxy) для создания/создания EventSource – Benjol