在 dotnet 9 的 SDK 版本里面,将 Terminal Logger 功能设置为默认。这是一个令我烦恼的功能。我将在这篇博客里面和大家介绍这是一个什么功能,以及如何将此功能禁用

在 dotnet 9 默认开启的 Terminal Logger 功能,是在 dotnet 8 作为实验性引入的功能。核心原因是因为有开发者认为 dotnet sdk 在构建等过程中输出的内容太多了,干扰了程序猿的开发,期望能够自动折叠或删除不需要的输出内容。比如在 dotnet build 过程中,将在构建过程中刷刷刷显示日志的过程内容,如 Info 内容,但最终只包含构建过程,以及进行读秒。完成之后就只有警告和错误信息留下,其他信息全部删除

PS C:\lindexi\Code\Foo> dotnet build
还原完成(0.2)
  Foo 已成功 (1.5) → bin\Debug\net9.0\Foo.dll

在 2.0 中生成 已成功

然而我日常开发很多开发任务都是和编译器相关的,这就意味着如果只剩下警告信息或错误信息,那对我调查问题是几乎完全没有帮助的

为了看到完全的日志,我就不断在 Windows 的 cmd 上,使用重定向输出方式,将输出内容放入到文件里面,如以下命令行示例,将构建输出信息重定向当前工作文件夹的 1.txt 文件里面。但这样的方式的效率很低,我需要不断读取本地文件才能知道构建日志信息

dotnet build > 1.txt

好在 dotnet 里面提供了对 Terminal Logger 功能的开关,可以使用 --tl:off 参数将其禁用,回到原本的完全日志输出形态

dotnet build --tl:off

执行以上之后的输出内容大概如下,可以看到还原过程等信息

PS C:\lindexi\Code\Foo> dotnet build --tl:off
  正在确定要还原的项目…
  已还原 C:\lindexi\Code\Foo\Foo.csproj (用时 36 毫秒)。
  Foo -> C:\lindexi\Code\Foo\bin\Debug\net9.0\Foo.dll

已成功生成。
    0 个警告
    0 个错误

已用时间 00:00:00.75

这项变更给许多库带来了坑点,原本很多库设计上都是简单控制台输出,现在为了更加方便定位问题,就需要直接打成 warn: 等开头的警告输出。如 DotNETBuildSDK 的 https://github.com/dotnet-campus/dotnetcampus.DotNETBuildSDK/pull/167 更改。但很多工具库都不能很好适应,因为日常输出过程中压根不知道后续会不会失败,如果都是 Info 等级输出,等到构建失败的时候,却会让开发者缺乏信息。特别是对新手开发者不友好,新手开发者一截图,都会发现毫无有用信息,有用的信息都被省略掉了

记录本文的目的是因为太难搜到了,我压根不知道这个功能叫什么。即使我在 Breaking change: Terminal logger is default - .NET - Microsoft Learn 这篇文档经过了非常多次,我都无法联系起来

为了方便大家找到本文,我添加了一些关键词

禁用 dotnet 折叠构建日志

禁止 dotnet sdk 删除构建日志

dotnet 命令行输出构建步骤时间

dotnet 命令行步骤时间

dotnet 命令行构建读秒

dotnet 控制台只输出重要信息

dotnet 控制台省略日志

dotnet 控制台省略输出

dotnet 控制台行折叠

dotnet build 只输出重要信息

dotnet build 输出 Info 等级日志信息

dotnet 控制台删除信息等级日志输出

dotnet 命令行 -v:diag 内容看不见

dotnet 只输出警告

dotnet build 只输出警告

dotnet 只输出错误

dotnet build 只输出错误

参考文档:


本文会经常更新,请阅读原文: https://blog.lindexi.com/post/dotnet-Cli-sdk-%E4%BB%80%E4%B9%88%E6%98%AF-Terminal-Logger-%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E7%A6%81%E7%94%A8%E6%AD%A4%E5%8A%9F%E8%83%BD.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者收藏我的博客导航

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

微软最具价值专家


无盈利,不卖课,做纯粹的技术博客

以下是广告时间

推荐关注 Edi.Wang 的公众号

欢迎进入 Eleven 老师组建的 .NET 社区

以上广告全是友情推广,无盈利