繁体   English   中英

如何在 .NET 6 Program.cs 中创建记录器

[英]How to create a Logger in .NET 6 Program.cs

我有一个 Data.Migrations 项目,它将运行任何实体框架迁移来更新数据库 model。 最近我已将此项目更新为 .NET 6,并使用以下代码向Program.cs添加了一个记录器:

var serviceCollection = new ServiceCollection();
var serviceProvider = serviceCollection.BuildServiceProvider();
_logger = serviceProvider.GetService<ILogger<Program>>();

然而,这会导致_logger == null

如何将记录器添加到 Program.cs?

你错过了这一行:

serviceCollection.AddLogging();

所以完整的代码看起来像这样:

var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging();
var serviceProvider = serviceCollection.BuildServiceProvider();
_logger = serviceProvider.GetService<ILogger<Program>>();

如果您使用的是最小托管 model,则非常简单:

...
var app = builder.Build();
app.Logger.LogInformation("Starting Application");
...

前面的代码显示在官方ASP.NET 核心文档

Visual Studio 抱怨以下错误编译器错误 CS0246。 它不识别程序

正如@Olegi 在上述回答中提到的,可以创建 Program.cs 的记录器。 但是,如果此记录器必须登录 WebApplicationBuilder 上配置的日志记录提供程序,则可以使用以下行

var logger = builder.Logging.Services.BuildServiceProvider().GetRequiredService<ILogger<Program>>();

你不考虑SeriLog吗? 我发现它对我的工作非常有用。 它为结构化日志记录和日志级别过滤提供了良好的支持。 UseSerilog扩展很方便。 更多关于日志在这里

一句忠告。 不要使用 BuildServiceProvider 这是一种潜在的代码异味。

添加了“ASP.Net core in action”一书作者的一些参考链接。

免责声明:尽管我愿意,但我与Andrew Lock没有任何关系。 这个人确实在.Net 上写了好文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM