0

我想将异常记录添加到我的 Windows 应用商店应用程序中。根据这里的想法,我从 App.xaml.cs 中的这段代码开始:

密封部分类 App : Application { private LoggingChannel 通道;私人 LoggingSession 会话;

/// <summary>
/// Initializes the singleton application object.  This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App()
{
    this.InitializeComponent();
    this.Suspending += OnSuspending;

    channel = new LoggingChannel("PlatypiChannel");
    session = new LoggingSession("PlatypiSession");
    session.AddLoggingChannel(channel, LoggingLevel.Error);

    UnhandledException += Application_UnhandledException;
}

async private void Application_UnhandledException(object sender, UnhandledExceptionEventArgs ex)
{
    ex.Handled = true;
    String exceptionCornucopia = String.Format("Message0 == {0}; Message1 == {1}; HResult == {2}; Inner Ex == {3}; StackTrace == {4}", ex.Message, ex.Exception.Message, ex.Exception.HResult, ex.Exception.InnerException, ex.Exception.StackTrace);
    channel.LogMessage(exceptionCornucopia, LoggingLevel.Error);
    // not seeing how this saves the channel's logged messages...???
    StorageFile logFile = await session.SaveToFileAsync(ApplicationData.Current.LocalFolder, "CrashLog");
}

正如评论所指出的,在我看来,最后一行只是将一个名为“CrashLog”的文件保存到 LocalFolder。但是 LogMessages 是如何进入该文件的呢?这里显然缺少一个关键部分。

4

1 回答 1

1

我知道这个问题已经开放了很长时间,但我只想为其他发现此问题的人提供答案。

这里的秘密是LogMessages都被写入LoggingChannel,它本身之前已经在LoggingSession中注册:

session.AddLoggingChannel(channel, LoggingLevel.Error);

当会话随后被保存到文件时,它显然知道相关的通道以及在哪里搜索待处理的日志消息。

于 2015-10-21T06:24:05.290 回答