如何在.NET Core 2.2中登录Program.Main?

3

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


你想记录什么? - Joshit
我想使用内置的日志记录器而不是任何第三方日志记录库。- 你不能这样做,因为ASP.NET Core默认的日志记录器还不支持文件日志记录或数据库日志记录! - TanvirArjel
@Joshit 举个例子,应用程序崩溃的原因。捕获来自 host.Run() 的异常并记录它。 - Piotr Perak
@TanvirArjel 我想要在控制台记录日志。 - Piotr Perak
好的!那你肯定行!等一下。 - TanvirArjel
显示剩余2条评论
1个回答

0

要得到你想要的,你必须编辑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 中 日志记录应用程序启动 的其他资源。


问题在于,如果Build()失败,您将无法记录。使用LoggerFactory,您可以在Main()中的第一件事就创建日志记录器。 - Piotr Perak
例如,在Startup类中。如果我想在构建主机之前记录“应用程序正在启动”,该怎么做? - Piotr Perak
你仍然可以使用ILoggerFactory。只有.AddConsole()扩展(和其它一些)被弃用了。https://github.com/aspnet/Announcements/issues/238 - Joshit
1
作为另一个资源,请查看Scott Allen的博客文章:https://odetocode.com/blogs/scott/archive/2018/07/16/7-tips-for-troubleshooting-asp-net-core-startup-errors.aspx - Joshit
但是你可以使用AddConsole() - 只是稍微不同的方式。我已经再次编辑了我的问题 - 无论如何.. 如果我没有理解你的意思,对不起。 - Joshit
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接