[英]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.