2016-11-21 67 views
0

我想使用ETW進行事件日誌記錄,並且相信我已經正確設置了一切。但是,當應用程序退出時,我沒有在文件中看到任何事件。我創建並關聯了一個FileLoggingSession和LoggingChannel。我在使用LoggingChannel時沒有遇到任何錯誤。一切似乎行爲正常,但日誌文件似乎沒有任何我發佈的消息。在UWP中的ETW日誌記錄

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); 
    } 

任何幫助,將不勝感激。謝謝。

+0

我假設你沒有使用自己的自定義ETW清單?你在錄什麼供應商? – Sunius

+0

我不確定你在問什麼。我沒有自定義清單,但對提供者的問題不確定。基本上,我只想使用ETW框架來記錄事件消息。我在這個代碼中使用了UWP示例應用程序。我只是看不到在.etl文件中顯示的.LogMessage(...)調用。謝謝。 –

+0

沒關係。它正在工作,我只需要關閉程序併發出.CloseAndSaveToFileAsync() –

回答

0

已解決。當程序終止(或暫停)時,我需要發出.CloseAndSaveToFileAsync()。

謝謝。

+0

爲了更加簡潔,我添加了一個掛起處理程序並在記錄器上調用了一個名爲.CloseAndSaveToFileAsync()的方法。然後我將最後一個文件重命名爲我的「標準」日誌文件約定。 –