2016-11-21 63 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()的方法。然后我将最后一个文件重命名为我的“标准”日志文件约定。 –