在 Mac 上的 VS Code 中的 .NET 6 MVC 项目中使用 Serilog 时出现问题
Problem Using Serilog on .NET6 MVC Project in VS Code on Mac
我正在将遗留的 .NET 2.2 Core MVC 应用程序迁移到 .NET 6。我面临的挑战之一是 Program.cs 不再调用 Startup.cs 所以我需要将所有内容迁移到 Program.cs。大多数情况下,有 1 个问题就可以了。我无法让 Serilog 在 Mac 上使用 VS Code 在调试模式下正常工作。问题是在 Windows.
上使用 Visual Studio Community 2022 似乎工作得很好
复制我的问题:
- 确保 Mac
上安装了 .NET 6
- 在 Mac 上打开 Visual Studio 代码(我已经在 x64 和 Arm 上试过了)
- 打开终端并创建一个文件夹
mkdir TestMVC
并进入该文件夹 cd TestMVC
- 在终端中创建一个 vanilla MVC 项目
dotnet new mvc
- 在 Visual Studio 代码中打开并按照任何设置说明进行操作(例如:安装 C# 扩展、设置 .Net Core Launch (web) launch.json 和 tasks.json)
- 通过 nuget 添加 Serilog
Install-Package Serilog -Version 2.10.0
并添加 Serilog.ASPNetCore Install-Package Serilog.AspNetCore -Version 4.1.0
- 在 Program.cs 中,在 v
ar builder = WebApplication.CreateBuilder(args);
行下方添加 builder.Host.UseSerilog();
- 运行 和调试
它会编译,一切看起来都正常,但不会启动浏览器 window,它会在显示所有各种 DLL 后停止。如果您注释掉 //builder.Host.UseSerilog();
一切正常。
我不认为它是 Serilog,因为如果我在 Windows 机器上的 Visual Studio 2022 预览版中打开完全相同的项目(没有变化),它工作正常。
有什么建议或想法可以帮助我吗?
VS Code 监视控制台输出以查找在 serverReadyAction
下的 launch.json
中定义的特定正则表达式,因此如果您根本不写入控制台(看起来是你的情况)或者如果你使用与正则表达式不匹配的输出模板写入控制台,那么浏览器将永远不会启动。
"serverReadyAction": {
"action": "openExternally",
"pattern": "\bNow listening on:\s+(https?://\S+)" <<<<<<<<
}
现在写入控制台应该足以让浏览器使用默认模板附带的默认 RegEx 由 VS Code 启动(我知道......不过不要开枪,向VS 代码伙计们!):
builder.Host.UseSerilog((ctx, lc) => lc
.WriteTo.Console());
如果这不起作用并且 RegEx 不匹配,您可以更改 RegEx,或更改输出模板以匹配 RegEx(hacky,不是我的建议,但有效):
builder.Host.UseSerilog((ctx, lc) => lc
.WriteTo.Console(outputTemplate: "{Level:w4}: {SourceContext}[0] {NewLine} {Message:lj}{Exception}{NewLine}"));
只是添加到 C. Augusto Proiete 的回答中,还要确保如果您对 Microsoft
日志记录进行任何日志级别覆盖,则需要 "Microsoft.Hosting.Lifetime": "Information"
.
例如,覆盖的常见设置是这样的。
"Override": {
"Microsoft": "Warning",
"System": "Warning" ,
"Microsoft.AspNetCore": "Warning"
}
通过上述,serilog 将不会记录 vs code 启动浏览器所需的行。
VS Code 正在寻找包含此 Now listening on: https://localhost:7106
的行
你需要添加“Microsoft.Hosting.Lifetime”:“信息”,像这样。
"Override": {
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"System": "Warning" ,
"Microsoft.AspNetCore": "Warning"
}
我正在将遗留的 .NET 2.2 Core MVC 应用程序迁移到 .NET 6。我面临的挑战之一是 Program.cs 不再调用 Startup.cs 所以我需要将所有内容迁移到 Program.cs。大多数情况下,有 1 个问题就可以了。我无法让 Serilog 在 Mac 上使用 VS Code 在调试模式下正常工作。问题是在 Windows.
上使用 Visual Studio Community 2022 似乎工作得很好复制我的问题:
- 确保 Mac 上安装了 .NET 6
- 在 Mac 上打开 Visual Studio 代码(我已经在 x64 和 Arm 上试过了)
- 打开终端并创建一个文件夹
mkdir TestMVC
并进入该文件夹cd TestMVC
- 在终端中创建一个 vanilla MVC 项目
dotnet new mvc
- 在 Visual Studio 代码中打开并按照任何设置说明进行操作(例如:安装 C# 扩展、设置 .Net Core Launch (web) launch.json 和 tasks.json)
- 通过 nuget 添加 Serilog
Install-Package Serilog -Version 2.10.0
并添加 Serilog.ASPNetCoreInstall-Package Serilog.AspNetCore -Version 4.1.0
- 在 Program.cs 中,在 v
ar builder = WebApplication.CreateBuilder(args);
行下方添加builder.Host.UseSerilog();
- 运行 和调试
它会编译,一切看起来都正常,但不会启动浏览器 window,它会在显示所有各种 DLL 后停止。如果您注释掉 //builder.Host.UseSerilog();
一切正常。
我不认为它是 Serilog,因为如果我在 Windows 机器上的 Visual Studio 2022 预览版中打开完全相同的项目(没有变化),它工作正常。
有什么建议或想法可以帮助我吗?
VS Code 监视控制台输出以查找在 serverReadyAction
下的 launch.json
中定义的特定正则表达式,因此如果您根本不写入控制台(看起来是你的情况)或者如果你使用与正则表达式不匹配的输出模板写入控制台,那么浏览器将永远不会启动。
"serverReadyAction": {
"action": "openExternally",
"pattern": "\bNow listening on:\s+(https?://\S+)" <<<<<<<<
}
现在写入控制台应该足以让浏览器使用默认模板附带的默认 RegEx 由 VS Code 启动(我知道......不过不要开枪,向VS 代码伙计们!):
builder.Host.UseSerilog((ctx, lc) => lc
.WriteTo.Console());
如果这不起作用并且 RegEx 不匹配,您可以更改 RegEx,或更改输出模板以匹配 RegEx(hacky,不是我的建议,但有效):
builder.Host.UseSerilog((ctx, lc) => lc
.WriteTo.Console(outputTemplate: "{Level:w4}: {SourceContext}[0] {NewLine} {Message:lj}{Exception}{NewLine}"));
只是添加到 C. Augusto Proiete 的回答中,还要确保如果您对 Microsoft
日志记录进行任何日志级别覆盖,则需要 "Microsoft.Hosting.Lifetime": "Information"
.
例如,覆盖的常见设置是这样的。
"Override": {
"Microsoft": "Warning",
"System": "Warning" ,
"Microsoft.AspNetCore": "Warning"
}
通过上述,serilog 将不会记录 vs code 启动浏览器所需的行。
VS Code 正在寻找包含此 Now listening on: https://localhost:7106
你需要添加“Microsoft.Hosting.Lifetime”:“信息”,像这样。
"Override": {
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"System": "Warning" ,
"Microsoft.AspNetCore": "Warning"
}