1

Windows 8.1 引入了一个FileLoggingSession类来将消息记录到文件中。文档说:

FileLoggingSession 类在记录消息时将记录的消息发送到磁盘文件。FileLoggingSession 类使用顺序记录,这意味着所有消息都发送到磁盘文件,并保留消息的顺序历史记录。这与 LoggingSession 类不同,后者按需将记录的消息发送到磁盘,当出现问题并且需要分析内存中消息的即时历史时,就会发生这种情况。

但是我找不到日志文件。我在其中找到了一个Log-MySession-1.etl文件,LocalState/Logs但它只有 1kb 并且似乎不包含日志。这是我写的一些测试代码:

    FileLoggingSession loggingSession;
    LoggingChannel loggingChannel;

    loggingSession = new FileLoggingSession("MySession");
    loggingChannel = new LoggingChannel("MyChannel");
    loggingSession.AddLoggingChannel(loggingChannel);

    for (int i = 0; i < 1000; i++)
    {
        loggingChannel.LogMessage("Test message: " + i);
    }
4

3 回答 3

0

它应该可以通过LogFileGenerated事件(文档)获得:

事件参数LogFileGeneratedEventArgs文档)包含一个File属性。

于 2013-09-19T02:34:48.330 回答
0

“.etl”文件包含二进制格式的日志。在命令提示符下使用以下命令以 XML 格式提取日志:

c:\ tracerpt.exe my_etl_file_name.etl -of XML -o readable_logs.xml

您可以选择在收到日志创建事件后从代码中调用它。C++/PInvoke 的另一个选项是在将“.etl”文件上传到您的服务器后对它们使用OpenTraceProcessTraceCloseTrace方法。

于 2014-03-28T04:36:30.250 回答
0

碰到这个。创建 FileLoggingSession 挂钩后,LogFileGenerated 事件处理程序。然后在您的事件处理程序方法中转储 args.File.Path。

    public FileLoggingHelper( ...) 
    {
        m_fileLoggingSession = new FileLoggingSession( "mylogsession" );
        m_fileLoggingSession.LogFileGenerated += FileLoggingSession_LogFileGenerated;
    }

    private void FileLoggingSession_LogFileGenerated(IFileLoggingSession sender, LogFileGeneratedEventArgs args)
    {
        System.Diagnostics.Debug.WriteLine( "generated " + args.File.Path);
        ...
    }
于 2015-12-30T19:20:06.913 回答