提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
背景:ConfigureExtensions.AddNLog(ILoggerFactory)”已过时:“Instead use ILoggingBuilder.AddNLog() or IHostBuilder.UseNLog(),发现这个方法过时了
提示:以下是本篇文章正文内容,下面案例可供参考
一、发现问题
如下图:
二、解决问题
1.根据提示使用ILoggingBuilder替换ILoggerFactory
原代码如下(示例):
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactor)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//加载Nlog的nlog.config配置文件
LogManager.LoadConfiguration("Config/nlog.config");
//添加NLog
loggerFactor.AddNLog();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
修改后代码如下(示例):
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggingBuilder loggerFactor)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//加载Nlog的nlog.config配置文件
LogManager.LoadConfiguration("Config/nlog.config");
//添加NLog
loggerFactor.AddNLog();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
截图效果:
2.运行测试项目
代码如下(示例):
dotnet StudyCore.dll --ip 127.0.0.1 --port 9001
运行错误(示例):
查阅相关资料截图
参考资料网址:
- https://stackoverflow.com/questions/58969904/could-not-resolve-a-service-of-type-microsoft-extensions-logging-iloggingbuilde
- https://stackoverflow.com/questions/53844561/no-service-for-type-microsoft-extensions-logging-iloggingbuilder-has-been-regi
- https://blog.csdn.net/sd7o95o/article/details/81350638
3.修改Program类和Startup类代码
Program类代码如下(示例):
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
#region 日志代码
.ConfigureLogging((ILoggingBuilder logBuilder) =>
{
logBuilder.AddNLog();
logBuilder.AddConsole();
//logBuilder.confi
NLog.LogManager.LoadConfiguration("Config/nlog.config");
})
#endregion
.ConfigureWebHostDefaults(webBuilder =>
{
var config = new ConfigurationBuilder()
.AddCommandLine(args)
.Build();
String ip = config["ip"];
String port = config["port"];
webBuilder
.UseStartup<Startup>()
.UseUrls($"http://{ip}:{port}")
;
});
Startup类代码如下(示例):
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//加载Nlog的nlog.config配置文件
//LogManager.LoadConfiguration("Config/nlog.config");
添加NLog
//loggerFactor.AddNLog();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
4.测试运行