以前我可以使用LoggerFactory
,但是现在它已被标记为过时。
如何在ILoggingBuilder
方法的开头访问Main
并创建记录器实例?我想使用内置记录器,而不要使用任何第三方记录库。
答案 0 :(得分:1)
要获得所需的内容,必须编辑CreateWebHostBuilder方法:
public static IWebHost CreateWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole(); // Or any other provider
}).Build();
现在,此方法返回配置了日志记录的主机。现在,您可以从主机的服务中获取ILogger-Service:
public static void Main(string[] args)
{
var host = CreateWebHost(args);
try
{
var logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Called from Main");
host.Run();
}
catch (Exception)
{
// do something
}
}
要在启动中使用日志记录,您仍然可以使用ILoggerFactory:
private ILoggerFactory _loggerFactory;
public Startup(IConfiguration configuration, ILoggerFactory loggerFactory)
{
Configuration = configuration;
_loggerFactory = loggerFactory;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
try
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
catch (Exception ex)
{
var logger = _loggerFactory.CreateLogger("Startup");
// log
throw;
}
}
这是asp.net core 2.2中logging和app startup的其他资源。