Mac端VS Code下.NET6 MVC项目使用Serilog调试启动异常求助
排查方向
- Serilog 包版本兼容性问题:你当前使用的Serilog.AspNetCore 4.1.0是适配.NET 5的版本,未对.NET 6做官方兼容适配。Windows端Visual Studio自带的运行时兼容垫片可以兼容低版本包,但Mac端的.NET 6运行时校验更严格,容易出现未知异常。
- Serilog 初始化配置缺失:你仅调用了
builder.Host.UseSerilog(),未提前配置Serilog的日志输出规则,Mac端VSCode的调试控制台输出管道和Windows不同,无默认配置的情况下Serilog可能直接触发静默崩溃导致进程退出。 - VSCode调试配置不匹配:VSCode默认调试用的内部控制台(internalConsole)对Serilog的ANSI颜色输出、标准输出流的支持存在兼容问题,Mac端该问题尤为明显。
- 文件权限问题:如果Serilog默认配置包含本地文件输出,VSCode调试时的工作目录权限不足会导致日志写入失败,触发进程异常退出。
可行解决方案
- 升级适配.NET 6的Serilog版本
执行以下命令升级相关包:
dotnet add package Serilog --version 2.12.0 dotnet add package Serilog.AspNetCore --version 6.1.0
- 补全Serilog初始化配置
在Program.cs文件最开头添加全局日志配置,避免裸调用UseSerilog():
// 开启Serilog自诊断,方便定位具体报错(问题解决后可移除) Serilog.Debugging.SelfLog.Enable(msg => Console.WriteLine($"SERILOG DIAG: {msg}")); // 初始化默认日志配置 Log.Logger = new LoggerConfiguration() .WriteTo.Console() .CreateLogger();
修改UseSerilog调用代码,显式指定配置加载逻辑:
builder.Host.UseSerilog((context, config) => { config.ReadFrom.Configuration(context.Configuration) .WriteTo.Console(); });
- 修改VSCode调试配置
打开.vscode/launch.json文件,找到对应.NET Core Launch (web)的配置项:
- 将
"console"字段的值从internalConsole改为integratedTerminal - 确认
"cwd"字段的值为"${workspaceFolder}",确保工作目录指向项目根目录
修改完成后重启调试即可。
内容的提问来源于stack exchange,提问作者Mike Smith
相关产品推荐
相关产品推荐

