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

C# Windows 10通用应用程序中的事件记录器,c#,windows-runtime,winrt-xaml,win-universal-app,windows-10,C#,Windows Runtime,Winrt Xaml,Win Universal App,Windows 10,我正在尝试为Windows通用应用程序创建事件日志。 早些时候,我们使用了System.Diagnostics EventLog来记录事件,但我在Windows 10 Universal Apps平台上找不到类似的内容。 是否可以为Windows 10创建日志,并且可以将这些日志写入文件以便以后访问 我搜索了很多,但什么也找不到。FileLoggingSession > Windows 8.1 > > FILGOGGING会话和 LoggGuange类,在 Windows .Funtud

我正在尝试为Windows通用应用程序创建事件日志。 早些时候,我们使用了
System.Diagnostics EventLog
来记录事件,但我在Windows 10 Universal Apps平台上找不到类似的内容。 是否可以为Windows 10创建日志,并且可以将这些日志写入文件以便以后访问


我搜索了很多,但什么也找不到。

FileLoggingSession

<> > <代码> Windows 8.1 > <代码> > FILGOGGING会话和<代码> LoggGuange类,在<代码> Windows .Funtudio.Tyrasys< /Cord>命名空间中,当配置为这样做时,可以执行对文件的日志记录。你可以在官方网站上读到更多

初始化、使用和检索日志文件可以像以下代码段中那样完成,当然,您需要创建接口、单例等以使其可用:

// 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
记录会话

正如
FileLoggingSession
将日志写入文件,但主要区别在于
FileLoggingSession
会立即将日志写入文件,而
LoggingSession
不会,您需要使用
SaveToFileAsync
方法手动请求将日志写入文件。从文件中:

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

计量

如果不想使用
FileLoggingSession
LoggingSession
类,您还有其他选择。一个好的解决方案是,它有一个
FileStreamingTarget
target,使登录Windows/Phone应用程序变得非常简单

您可以在需要时创建记录器,例如在页面中:

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

第二种解决方案是由Can Bilgin在MSDN样本库中记录样本,其中包含
MetroEventSource
类。您可以记录消息,例如以下错误:

// 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.Log.Error("Here is the error message");

如果您使用此记录器,请不要忘记在应用程序运行时对其进行初始化,如示例项目中所述。

我已经阅读了FileLoggingSession的文档,其中说明FileLoggingSession会立即记录到硬盘上。然而,我没有看到任何相同的样品。似乎我们必须创建一个日志通道,将其添加到FileLoggingSession,使用这个日志通道进行日志记录。最后,当我们调用fileLoggingSession.closeAndSavetoFileAsync()时,它会将日志写入文件。问题是如何使用FileLoggingSession将日志立即写入硬盘?因为如果我的应用程序在此之前崩溃,我可能无法调用closeAndSaveToFileAsync()。请帮忙。谢谢@克里斯蒂安:我们可以使用您提到的任何一种解决方案来登录Windows事件查看器,就像System.Diagnostics事件日志一样吗?