我需要在控制台应用程序中获取 Serilog 作为记录器,然后将其传递给类。我知道如何在 ASP.NET Core 中执行此操作,但我不知道如何在控制台应用程序中执行此操作。
var loggerService = host.Services.GetService<ILogger>()
返回 null。
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MyProgram.Services;
using Serilog;
var hostBuilder = Host.CreateApplicationBuilder(args);
hostBuilder.Configuration
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(hostBuilder.Configuration)
.Enrich.FromLogContext()
.CreateLogger();
hostBuilder.Logging.ClearProviders();
hostBuilder.Logging.AddSerilog(logger);
hostBuilder.Services.BuildServiceProvider();
var host = hostBuilder.Build();
var configService = host.Services.GetService<IConfiguration>();
var loggerService = host.Services.GetService<ILogger>(); // null
IMyService myService = new MyService(configService, loggerService);
班级代码:
public class MyService : IMyService
{
private readonly IConfiguration _config;
private readonly ILogger _logger;
public MyService(IConfiguration config, ILogger logger)
{
_config = config;
_logger = logger;
}
private void DoSomething()
{
_logger.LogError("Exceprion.");
}
}
你们非常接近。你需要这样注入它 var logger = host.Services.GetService
我已经修改了您的代码并以正确的方式添加了它。尝试一下吧。
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MyProgram.Services;
using Serilog;
var hostBuilder = Host.CreateApplicationBuilder(args);
hostBuilder.Configuration
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(hostBuilder.Configuration)
.Enrich.FromLogContext()
.CreateLogger();
hostBuilder.Logging.ClearProviders();
hostBuilder.Logging.AddSerilog(logger);
hostBuilder.Services.BuildServiceProvider();
var host = hostBuilder.Build();
var configService = host.Services.GetService<IConfiguration>();
var loggerService = host.Services.GetService<ILogger<Program>(); // changed here
IMyService myService = new MyService(configService, loggerService);
myService.DoSomthing();
这将打印如下消息。