簡體   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