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