How can I log LoggingChannel LogMessages to the StorageFile?

640 views Asked by At

I want to add logging of exceptions to my Windows Store App. Based on an idea from here, I've started off with this code in App.xaml.cs:

sealed partial class App : Application { private LoggingChannel channel; private LoggingSession session;

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

As the comment indicates, it seems to me the last line simply saves a file named "CrashLog" to the LocalFolder. But how do the LogMessages get into that file? There is obviously a key piece missing here.

1

There are 1 answers

0
user1842665 On BEST ANSWER

I know that this question has been open for a long time, but I just want to provide an answer for anyone else finding this.

The secret here is that the LogMessages are all written into the LoggingChannel, which itself has previously been registered with the LoggingSession:

session.AddLoggingChannel(channel, LoggingLevel.Error);

When the session is then saved to a file, it obviously knows about the associated channels and where to search for pending log messages.