跳至页脚内容
Iron Academy Logo
C# 应用程序
C# 应用程序

其他类别

异常显示格式化 - Spectre 控制台系列

Tim Corey
8分51秒

在构建 .NET 控制台应用程序时,您经常需要以对开发人员和用户都合理的方式处理异常。 普通的控制台输出会让异常看起来像一长串无法阅读的数据--尤其是在处理堆栈跟踪和反射繁重的库时。 在"异常显示格式化 - Spectre Console 系列"视频中,Tim Corey 向我们介绍了如何使用 Spectre.Console 库使异常更易于阅读、解析和理解。

在本文中,我们将探讨 Tim 如何处理异常、使用 Spectre.Console 中的命令和方法,以及在异常显示中应用不同的设置和样式。

简介:为什么需要格式异常?

在视频的开头,Tim Corey 介绍了 Spectre.Console,称其为一个库,可以帮助开发人员将普通的控制台应用程序转化为 "视觉上吸引人、内容丰富的应用程序"。在本课中,他重点介绍了如何处理异常,使异常显示更清晰、更易读。

Tim 解释说,默认情况下,当控制台应用程序抛出异常时,Console.WriteLine(ex) 的输出结果只是一堵文字墙。 它包括路径、堆栈跟踪和类型名称--所有这些都是连续的字符串。 功能性强,但不友好。

为了演示,Tim 制作了一个小例子:

try
{
    throw new Exception("You forgot to give me the data.");
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}
try
{
    throw new Exception("You forgot to give me the data.");
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}

他在终端中运行了这条命令,不出所料,输出结果一团糟。 一切融为一体。 Tim 说,很难找出重要的信息、方法或文件位置。 因此,他开始使用 Spectre.Console 异常格式来解决这个问题。

使用 AnsiConsole.WriteException - 第一步

为了改善显示效果,Tim 替换了这一行:

Console.WriteLine(ex);
Console.WriteLine(ex);

使用 Spectre 命令:

AnsiConsole.WriteException(ex);
AnsiConsole.WriteException(ex);

这一个方法调用改变了一切。

当他再次运行该应用程序时,终端中的输出已经着色。 信息清晰明了,堆栈跟踪部分的样式也有所不同。 文本更易于解析,关键值更突出。

Tim 指出,AnsiConsole 类是 Spectre.Console 中渲染样式输出的中心接入点。 WriteException() 方法专门用于处理异常并为您自动格式化异常。

他说:"这已经是一个进步了。现在,控制台会突出显示消息、文件路径和方法名称,让人一目了然。

使用 ExceptionFormats 添加格式化选项

在展示了基本示例后,Tim 又进一步添加了格式化参数,以控制异常显示的内容和缩短的方式。

他介绍了 ExceptionFormats 枚举,该枚举提供了多个选项,如 ShortenPaths、ShortenTypes、ShortenMethods 和 ShowLinks。 您可以单独使用,也可以使用管道 (|) 字符。

蒂姆编写了以下代码:

AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);

当他运行这条命令时,控制台输出会变得更短更简洁。

他解释说

  • 路径已缩短--不再显示完整的目录路径,而只显示文件名,如 Program.cs。

  • 类型已缩短--您将看到 System.IO.InvalidDataException 而不是 System.IO.InvalidDataException 。

  • 缩短方法--为了清晰起见,对冗长的通用方法名称进行了删减。

本例展示了 Spectre.Console 的异常格式化选项如何在不丢失基本信息的情况下使结果更加紧凑。

Tim 强调,第一个版本(完整路径和命名空间)包含 "大部分噪音",而这个格式化版本在您只想快速了解问题根源时更有意义。

结合多种格式,实现更多控制

蒂姆不会止步于此。 他演示了如何使用管道运算符组合多个格式化设置

AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);

3:54处,Tim 解释了 ShowLinks 选项。 这样,Spectre.Console 就能在兼容终端中呈现可点击或可悬停的文件链接。 在他的例子中,文件名 Program.cs 现在出现了下划线。 当他将鼠标悬停在该文件上时,终端会显示一个包含完整文件路径的工具提示。

他指出,这种行为取决于您的环境--在支持可点击链接的终端(如某些 bash 或 VS Code 终端)中效果更好。

通过组合格式,您可以准确决定异常输出应显示多少信息--也许您想要缩短路径但显示完整的类型名称,或者您想要完全隐藏方法细节。 Spectre.Console 可为您提供这种灵活性。

深入了解异常设置

此时,Tim 引入了一个名为 ExceptionSettings 的新对象。 这使您能够以更先进的方式自定义异常的格式和样式。

他解释说,您可以传递整个设置对象,而不是传递单个格式值:

var settings = new ExceptionSettings
{
    Format = ExceptionFormats.ShortenEverything,
    Style = new ExceptionStyle
    {
        Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
    }
};
AnsiConsole.WriteException(ex, settings);
var settings = new ExceptionSettings
{
    Format = ExceptionFormats.ShortenEverything,
    Style = new ExceptionStyle
    {
        Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
    }
};
AnsiConsole.WriteException(ex, settings);

在这里,Tim 配置了两个属性:

  • 格式--规定例外信息应如何缩写。

  • 风格 - 定义不同异常元素(如方法名称、路径或消息)的外观。

Spectre.Console 提供丰富的样式选项,如前景色、背景色和装饰(如下划线、闪烁、加粗等)。

Tim 指出,您还可以为异常显示的其他部分设计样式,例如参数名称、方法调用或括号,而不仅仅是消息。 这允许对异常输出在 CLI 中的外观进行非常精细的控制。

异常消息的样式

为了展示样式设计的实际效果,Tim 专门为异常的消息部分应用了一种样式。 他将信息的颜色设置为红色,并添加了缓慢闪烁的效果,使其更加突出:

Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)

当他运行应用程序时,"嘿,你忘了给我数据。"的消息现在在终端窗口内以红色闪烁。

Tim 指出,这有助于突出异常输出中最重要的信息--信息本身。 文本的其余部分(如文件名和行号)仍可在下面找到,但您的视线会立即被出错的地方所吸引。

他解释说:"它能真正把你的注意力吸引到最重要的事情上,也就是信息本身。 然后他们就能知道,哦,这是在 Program.cs 的 main 第 256 行"。

这展示了 Spectre.Console 如何不仅使数据可读,还增加了重点和视觉层次,帮助您更快地解释结果。

总结 Spectre 控制台系列

视频结束时,Tim 提到这是他的 Spectre.Console 系列的最后一部分--至少目前是这样。 他鼓励观众在suggestions.iamtimcorey.com上留下反馈意见或对更多主题的建议。

他指出,在整个系列中,他们涵盖了 Spectre 的一系列功能:渲染表格、处理 CLI 命令和参数、处理结构化文本,以及现在的格式化异常。

Tim 最后说,本课为开发人员提供了优雅、清晰和可视化反馈地处理异常的工具,所有这一切都在一个简单的 .NET 控制台应用程序中完成。

最后的想法

通过本攻略,Tim Corey 清晰地演示了如何使 Spectre.Console 异常更易读、信息更丰富、视觉更吸引人。 只需使用几行代码,开发人员就可以

  • 更有效地处理异常。

  • 使用缩短的路径和更简洁的文本对控制台输出进行格式化。

  • 使用 ExceptionSettings 对象对格式和风格进行微调。

  • 添加颜色和装饰,突出重要信息。

  • 将文件路径显示为可点击或可悬停的链接。

这种方法不仅能改善调试,还能让基于 CLI 的应用程序看起来更精致、更专业。 通过结合 AnsiConsole.WriteException() 等强大的方法、可定制的设置和丰富的样式选项,开发人员可以构建 .NET 控制台应用程序,提供有意义、结构合理、易于解析和理解的异常输出,这与 Tim Corey 在他的出色示例中展示的完全一致。

Hero Worlddot related to 异常显示格式化 - Spectre 控制台系列
Hero Affiliate related to 异常显示格式化 - Spectre 控制台系列

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我