在默认我写了一个 WPF 程序去做管理 ASP.NET Core 进程的日志的时候,重定向输出的内容里面每一行前面都添加了很多乱码字符串。其实这是 ASP.NET Core 控制台的颜色字符,解决方法是禁用控制台颜色

在看到重定向的输出里面包含以下乱码字符

info:

或者如下乱码字符

fail

这里 asp dotnet core 的日志内容的 [40m[32m[41m[30m 字符是控制颜色的字符,可以在 Startup.cs 的 ConfigureServices 方法使用下面代码禁用控制台输出颜色

public void ConfigureServices(IServiceCollection services)
{
	services.AddLogging(builder => builder
        .ClearProviders()
        // 这里的颜色会被显示为 fail 的内容
        // info:
        .AddConsole(options => { options.DisableColors = true; }));
}

注意上面代码使用 ClearProviders 清空了日志输出,上面代码禁用颜色用的是 options.DisableColors = true; 禁用

禁用之后输出控制台没有颜色,但重定向的日志里面也没有乱码

另外,在 WPF 之外,在 Kubernetes 上的重定向输出也会是差不多的乱码

�[40m�[32minfo�[39m�[22m�[49m: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://[::]:12312
�[40m�[32minfo�[39m�[22m�[49m: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
�[40m�[32minfo�[39m�[22m�[49m: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
�[40m�[32minfo�[39m�[22m�[49m: Microsoft.Hosting.Lifetime[0]
      Content root path: /lindexi/doubi

解决方法和上面相同


更新: 对于 .NET 5 及更加新的版本,需要使用以下代码禁用颜色

loggingBuilder.AddSimpleConsole(options =>
{
    options.ColorBehavior = LoggerColorBehavior.Disabled;
});

详细请看 https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/5.0/obsolete-consoleloggeroptions-properties


本文会经常更新,请阅读原文: https://blog.lindexi.com/post/ASP.NET-Core-%E8%A7%A3%E5%86%B3%E6%8E%A7%E5%88%B6%E5%8F%B0%E8%BE%93%E5%87%BA%E6%97%A5%E5%BF%97%E5%86%85%E5%AE%B9%E5%89%8D%E9%9D%A2-40m%E7%AD%89%E4%B9%B1%E7%A0%81%E5%AD%97%E7%AC%A6.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

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

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

微软最具价值专家


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

以下是广告时间

推荐关注 Edi.Wang 的公众号

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

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