2015-09-26 15 views
5

pracuję nad aplikacji opartej UWP dla Windows 10 Internetu przedmiotów, a ja chcąc skonfigurować ETW Tracing więc mogę oglądać zalogowaniu zdalnie za pomocą zintegrowanego interfejsu WWW:Kłopoty rejestrację Provider ETW

ETW List

I wierzę, stworzyliśmy odpowiednie typy, jednak nie widzę mojego dostawcy w żadnym z wykazów przedstawionych w sekcji Internet przedmiotów ETW:

ETW Options

My EventListener realizacja jest:

sealed class StorageFileEventListener : EventListener 
{ 
    /// <summary> 
    /// Storage file to be used to write logs 
    /// </summary> 
    private StorageFile _mStorageFile = null; 

    /// <summary> 
    /// Name of the current event listener 
    /// </summary> 
    private readonly string _mName; 

    public StorageFileEventListener(string name) 
    { 
     _mName = name; 

     Debug.WriteLine("StorageFileEventListener for {0} has name {1}", GetHashCode(), name); 

     AssignLocalFile(); 
    } 

    private async void AssignLocalFile() 
    { 
     _mStorageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(_mName.Replace(" ", "_") + ".log", 
                        CreationCollisionOption.OpenIfExists); 
    } 

    private async void WriteToFile(IEnumerable<string> lines) 
    { 
     // TODO: 
    } 

    protected override void OnEventWritten(EventWrittenEventArgs eventData) 
    { 
     // TODO: 
    } 

    protected override void OnEventSourceCreated(EventSource eventSource) 
    { 
     // TODO: 
    } 
} 

Moja EventSource realizacja jest:

internal sealed class Logger : EventSource 
{ 
    public static Logger Log = new Logger(); 

    [Event(1, Level = EventLevel.Verbose)] 
    public void Debug(string message, Exception exception) 
    { 
     var exceptionMessage = GenerateExceptionMessage(exception); 
     WriteEvent(1, message + exceptionMessage); 
    } 

    [Event(2, Level = EventLevel.Informational)] 
    public void Info(string message, Exception exception) 
    { 
     var exceptionMessage = GenerateExceptionMessage(exception); 
     WriteEvent(2, message + exceptionMessage); 
    } 

    [Event(3, Level = EventLevel.Warning)] 
    public void Warn(string message, Exception exception) 
    { 
     var exceptionMessage = GenerateExceptionMessage(exception); 
     WriteEvent(3, message + exceptionMessage); 
    } 

    [Event(4, Level = EventLevel.Error)] 
    public void Error(string message, Exception exception) 
    { 
     var exceptionMessage = GenerateExceptionMessage(exception); 
     WriteEvent(4, message + exceptionMessage); 
    } 

    [Event(5, Level = EventLevel.Critical)] 
    public void Critical(string message, Exception exception) 
    { 
     var exceptionMessage = GenerateExceptionMessage(exception); 
     WriteEvent(5, message + exceptionMessage); 
    } 

    private static string GenerateExceptionMessage(Exception exception) 
    { 
     return exception != null ? $" Exception message - {exception.Message} :: InnerException - {exception.InnerException} :: StackTrace - {exception.StackTrace}" 
            : ""; 
    } 
} 

Wreszcie zainicjalizować i skonfigurować moje EventSource/typów EventListener tak:

 EventListener genericListener = new StorageFileEventListener("MyIoTListener"); 
     genericListener.EnableEvents(Logger.Log, EventLevel.Critical); 

jestem brakuje podstawowego kroku?

Odpowiedz

1

To nie jest rozwiązanie polegające na wyświetlaniu źródła na liście dostawców niestandardowych, ale zapewnia dostęp do zdarzeń z poziomu interfejsu internetowego. Wystarczy wpisać identyfikator GUID obiektu EventSource w polu tekstowym dostawców niestandardowych.

Na telefon, mam C# UWP aplikację z następującym źródło zdarzenia, (skopiowany z here)

[EventSource(Guid = "{GUID of EventSource}", Name = "SourceName")] 
    class MyEventSource : EventSource 
    { 
     public void MyEvent(string msg, int id) { WriteEvent(1, msg, id); } 

     public static MyEventSource Log = new MyEventSource(); 
    } 

Używam API Portal Device Windows (described here) i kliknąć na poniższy proces w mojej aplikacji na pulpicie, aby odczytać zdarzenia:

  1. Podłączyć websocket do WS: //127.0.0.1: 10080/api/etw/sesji/realtime
  2. Wyślij "usługodawca {GUID} EventSource umożliwić 5"
  3. ... Czytaj wydarzenia,
  4. Wyślij "provider {GUID} wyłączyć z EventSource"

To wszystko dobrze działa, jednak , kiedy zapytanie http://127.0.0.1:10080/api/etw/customproviders, lista jest nadal pusta.

Na platformie pulpitu rozumiem jednego wykorzystuje wevtutil.exe:

wevtutil.exe im {App-Manifest}.man 

w podobnym celu, ale nie wiem, czy ma ona zastosowanie do Windows Mobile.

+0

Ponieważ EventSource generuje identyfikator GUID od nazwy, musisz użyć https://github.com/jonwagner/EventSourceProxy/wiki/Getting-the-EventSource-Manifest-or-GUID, aby uzyskać identyfikator GUID –