Windows 10通用应用程序中的事件记录器

本文关键字:事件 记录器 应用程序 10通 Windows | 更新日期: 2023-09-27 18:10:38

我正在尝试为Windows通用应用程序创建一个事件日志。早些时候,我们有System.Diagnostics EventLog来记录事件,但我在Windows 10通用应用程序平台上找不到类似的东西。是否有可能为创建日志Windows 10,这些日志可以写入文件以供以后访问?

我找了很多,但是什么也没找到。

Windows 10通用应用程序中的事件记录器

FileLoggingSession

由于Windows 8.1Windows.Foundation.Diagnostics命名空间中有FileLoggingSessionLoggingChannel类,当配置为这样做时,它们可以执行日志记录到文件。您可以在官方文档中阅读更多内容。

初始化、使用和检索日志文件可以像下面的代码片段一样完成,当然你需要创建接口、单例等来使它可用:

// Initialization
FileLoggingSession fileLoggingSession = new FileLoggingSession("session");
var loggingChannel = new LoggingChannel("channel");
fileLoggingSession.AddLoggingChannel(loggingChannel);
// Log messages
loggingChannel.LogMessage("error message", LoggingLevel.Error);
// When file is needed
var file = await fileLoggingSession.CloseAndSaveToFileAsync();
// Do anything with file

LoggingSession

就像FileLoggingSession将日志写入文件一样,但主要区别在于FileLoggingSession将日志立即写入文件,而LoggingSession不会,您需要使用SaveToFileAsync方法手动请求将日志写入文件。来自文档:

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

MetroLog

如果你不想使用FileLoggingSessionLoggingSession类,你有另一个选择。一个很好的解决方案是MetroLog,它有一个FileStreamingTarget目标,使得它非常简单地登录一个Windows/Phone应用程序。

在需要时创建日志记录器,例如在页面中:

public sealed partial class LogSamplePage : Win8Sample.Common.LayoutAwarePage
{
    private ILogger Log = LogManagerFactory.DefaultLogManager.GetLogger<LogSamplePage>();
}

那么你可以在页面中这样使用:

// flat strings...
if (this.Log.IsInfoEnabled)
    this.Log.Info("I've been navigated to.");
// formatting...
if (this.Log.IsDebugEnabled)
    this.Log.Debug("I can also format {0}.", "strings");
// errors...
try
{
    this.DoMagic();
}
catch(Exception ex)
{
    if (this.Log.IsWarnEnabled)
        this.Log.Warn("You can also pass in exceptions.", ex);
}

MetroEventSource

第二个解决方案是Can Bilgin在MSDN样例库上的日志样例,其中有MetroEventSource类。您可以像这样记录消息,例如错误:

 MetroEventSource.Log.Error("Here is the error message");

如果您使用这个记录器,不要忘记在应用程序运行时初始化它,如示例项目中所述。