gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:08:51 24 4
gpt4 key购买 nike

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

我搜索了很多,但找不到任何东西。

最佳答案

FileLoggingSession

Windows 8.1 以来,Windows.Foundation.Diagnostics 命名空间中有 FileLoggingSessionLoggingChannel 类,这可以在配置时执行记录到文件。可以在官方阅读更多documentation .

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

// 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 方法手动请求将日志写入文件。来自文档:

The FileLoggingSession class sends logged messages to disk files as they are logged. The FileLoggingSession class uses sequential logging, which means that all messages are sent to a disk file, and a sequential history of messages is retained. This is distinct from the LoggingSession class, which sends logged messages to disk on-demand, and this happens when there's a problem and the immediate history of in-memory messages is needed for analysis.

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

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

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

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

关于c# - Windows 10 通用应用程序中的事件记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32331506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com