如何在.net core 2.2中登录Program.Main?

时间:2019-01-21 13:06:15

标签: asp.net-core .net-core

以前我可以使用LoggerFactory,但是现在它已被标记为过时。 如何在ILoggingBuilder方法的开头访问Main并创建记录器实例?我想使用内置记录器,而不要使用任何第三方记录库。

1 个答案:

答案 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中loggingapp startup的其他资源。