2016-11-21 3 views
0

Ich möchte ETW für Ereignisprotokollierung verwenden und glaube, dass ich alles richtig eingerichtet habe. Ich sehe jedoch keine Ereignisse in der Datei, wenn die App beendet wird. Ich habe eine FileLoggingSession und LoggingChannel erstellt und zugeordnet. Ich bekomme keine Fehler, wenn ich LoggingChannel benutze. Alles scheint sich ordnungsgemäß zu verhalten, aber die Protokolldateien scheinen keine der von mir geposteten Nachrichten zu enthalten.ETW Anmelden UWP

public EtwLogger() 
    { 
     _channel = new LoggingChannel(LibSettings._etwLogChannel, null); 
     _channel.LoggingEnabled += _channel_LoggingEnabled; 
     _session = new FileLoggingSession(LibSettings._etwLogSession); 
     _session.LogFileGenerated += _session_LogFileGenerated; 
     _session.AddLoggingChannel(_channel); 
    } 
    public Task Log(LogEntry logEntry) 
    { 
     if (!isDisposed && _channel.IsEnabled(SeverityToLoggingLevel(logEntry.Severity))) 
     { 
      string message = $"{logEntry.TimeStamp.ToLocalTime().ToString("s")} {SeverityToString(logEntry.Severity)} : "; 
      if (logEntry.Source?.Length > 0) 
       message += $"{logEntry.Source} {logEntry.Message}"; 
      else 
       message += $"{logEntry.Message}"; 
      _channel.LogMessage(message, SeverityToLoggingLevel(logEntry.Severity)); 
      Debug.WriteLine($"ETW: {message}"); 
     } 
     return Task.FromResult(0); 
    } 

Jede Hilfe wäre willkommen. Vielen Dank.

+0

Ich nehme an, dass Sie nicht Ihr eigenes benutzerdefiniertes ETW-Manifest verwenden? Welchen Anbieter erfassen Sie? – Sunius

+0

Ich bin mir nicht sicher, was Sie fragen. Ich habe kein benutzerdefiniertes Manifest, bin mir aber bezüglich Ihrer Frage beim Anbieter nicht sicher. Im Grunde möchte ich nur Ereignisnachrichten mit dem ETW-Framework protokollieren. Ich habe die UWP-Beispiel-App für den Großteil dieses Codes verwendet. Ich sehe einfach nicht, dass die .LogMessage (...) Aufrufe in der .etl-Datei angezeigt werden. Vielen Dank. –

+0

Macht nichts. Es funktioniert, ich muss nur schließen Sie das Programm und geben Sie die .CloseAndSaveToFileAsync() –

Antwort

0

Gelöst. Ich muss den .CloseAndSaveToFileAsync() ausgeben, wenn das Programm beendet wird (oder aussetzt).

Danke.

+0

Um knapper zu sein, fügte ich eine Suspend-Handler und rief eine Methode auf den Logger namens .CloseAndSaveToFileAsync(). Dann habe ich die letzte Datei in meine "Standard" -Protokollkonvention umbenannt. –

Verwandte Themen