Windows 10通用应用程序中的事件记录器
本文关键字:事件 记录器 应用程序 10通 Windows | 更新日期: 2023-09-27 18:10:38
我正在尝试为Windows通用应用程序创建一个事件日志。早些时候,我们有System.Diagnostics EventLog
来记录事件,但我在Windows 10通用应用程序平台上找不到类似的东西。是否有可能为创建日志Windows 10,这些日志可以写入文件以供以后访问?
我找了很多,但是什么也没找到。
FileLoggingSession
由于Windows 8.1
在Windows.Foundation.Diagnostics
命名空间中有FileLoggingSession
和LoggingChannel
类,当配置为这样做时,它们可以执行日志记录到文件。您可以在官方文档中阅读更多内容。
初始化、使用和检索日志文件可以像下面的代码片段一样完成,当然你需要创建接口、单例等来使它可用:
// 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
如果你不想使用FileLoggingSession
或LoggingSession
类,你有另一个选择。一个很好的解决方案是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");
如果您使用这个记录器,不要忘记在应用程序运行时初始化它,如示例项目中所述。