Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

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 ex As Exception
Console.WriteLine(ex)
End Try他在终端中运行了这条命令,不出所料,输出结果一团糟。 一切融为一体。 Tim 说,很难找出重要的信息、方法或文件位置。 因此,他开始使用 Spectre.Console 异常格式来解决这个问题。
为了改善显示效果,Tim 替换了这一行:
Console.WriteLine(ex);Console.WriteLine(ex)using Spectre 命令:
AnsiConsole.WriteException(ex);AnsiConsole.WriteException(ex)这一个方法调用改变了一切。
当他再次运行该应用程序时,终端中的输出已经着色。 信息清晰明了,堆栈跟踪部分的样式也有所不同。 文本更易于解析,关键值更突出。
Tim 指出,AnsiConsole 类是 Spectre.Console 中渲染样式输出的中心接入点。 WriteException() 方法专门用于处理异常并为您自动格式化异常。
他说:"这已经是一个进步了。现在,控制台会突出显示消息、文件路径和方法名称,让人一目了然。
在展示了基本示例后,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 Or 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);Dim settings As New ExceptionSettings With {
.Format = ExceptionFormats.ShortenEverything,
.Style = New ExceptionStyle With {
.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 如何不仅使数据可读,还增加了重点和视觉层次,帮助您更快地解释结果。
视频结束时,Tim 提到这是他的 Spectre.Console 系列的最后一部分--至少目前是这样。 他鼓励观众在suggestions.iamtimcorey.com上留下反馈意见或对更多主题的建议。
他指出,在整个系列中,他们涵盖了 Spectre 的一系列功能:渲染表格、处理 CLI 命令和参数、处理结构化文本,以及现在的格式化异常。
Tim 最后说,本课为开发人员提供了优雅、清晰和可视化反馈地处理异常的工具,所有这一切都在一个简单的 .NET 控制台应用程序中完成。
通过本攻略,Tim Corey 清晰地演示了如何使 Spectre.Console 异常更易读、信息更丰富、视觉更吸引人。 只需使用几行代码,开发人员就可以
更有效地处理异常。
使用缩短的路径和更简洁的文本对控制台输出进行格式化。
使用 ExceptionSettings 对象对格式和风格进行微调。
添加颜色和装饰,突出重要信息。
将文件路径显示为可点击或可悬停的链接。
这种方法不仅能改善调试,还能让基于 CLI 的应用程序看起来更精致、更专业。 通过结合 AnsiConsole.WriteException() 等强大的方法、可定制的设置和丰富的样式选项,开发人员可以构建 .NET 控制台应用程序,提供有意义、结构合理、易于解析和理解的异常输出,这与 Tim Corey 在他的出色示例中展示的完全一致。
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy