跳到主要内容
版本:11.0.0

如何记录错误和警告

本指南向你展示如何在 Avalonia UI 中使用标准 (Microsoft) System.Diagnostics.Trace组件记录警告和错误。

如果你使用的是 Avalonia UI 的解决方案模板,那么记录的代码将会被添加到你的项目中。

要启用或检查是否已启用日志记录,请按照以下步骤操作:

  • 找到你应用程序的 Program.cs 文件。
  • 检查 BuildAvaloniaApp 方法是否调用了 LogToTrace,例如:
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.LogToTrace();

如果没有参数,LogToTrace 将记录严重性为 Warning 或更高级别的消息。你可以通过向 LogLevel 调用传递一个 LogToTrace 参数来改变这个级别。例如:

using Avalonia.Logging;
...
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.LogToTrace(LogEventLevel.Verbose)
信息

有关 LogEventLevel 枚举的完整API文档,请参阅 这里.

然后,日志消息会在你的IDE的 Debug 窗口的 Output 视图中显示。例如,启用详细日志记录时:

如果你想将这些消息重新路由到不同的位置,你可以使用 System.Diagnostics.Trace 组件上的方法。

日志区域

Avalonia UI 中的每一条消息都会被分配一个可以用于过滤日志的区域。这些由 Avalonia.Logging.LogArea 静态类的成员描述:

  • Property
  • Binding
  • Animations
  • Visual
  • Layout
  • Control

你可以通过在 LogToTrace 调用中在 LogEventLevel 参数后添加类型为 Avalonia.Logging.LogArea 的参数来将日志限制在特定区域或区域。例如,以下代码将仅记录 property 和 layout 消息:

public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.LogToTrace(LogEventLevel.Debug, LogArea.Property, LogArea.Layout);

日志池

LogToTrace 扩展方法使用 TraceLogSink,该池将消息写入 Trace。Avalonia 支持通过实现 ILogSink 来创建自定义池。将您的自定义池分配给 Avalonia.Logging.Logger.Sink 将允许 Avalonia 使用它。

扩展方法来分配 Logger.Sink
using Avalonia.Controls;
using Avalonia.Logging;

namespace MyNamespace;
public static class MyLogExtensions
{
public static AppBuilder LogToMySink(this AppBuilder builder,
LogEventLevel level = LogEventLevel.Warning,
params string[] areas)
{
Logger.Sink = new MyLogSink(level, areas);
return builder;
}
}
使用自定义池启动
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.LogToMySink();
信息

GitHub 上查看源代码 TraceLogSink.cs