小编典典

如何从 Startup.cs 中写入日志?

all

为了调试在启动时失败的 .NET Core 应用程序,我想从 startup.cs 文件中写入日志。我在文件中有日志记录设置,可以在 startup.cs
文件之外的应用程序的其余部分中使用,但不确定如何从 startup.cs 文件本身写入日志。


阅读 72

收藏
2022-07-16

共1个答案

小编典典

.Net 核心 3.1

不幸的是,对于 ASP.NET Core
3.0,情况又有点不同。默认模板使用HostBuilder(而不是WebHostBuilder),它设置了一个新的通用主机,可以托管多个不同的应用程序,不限于
Web 应用程序。这个新主机的一部分还删除了以前为 Web 主机存在的第二个依赖注入容器。这最终意味着您将能够将除
之外的任何依赖项注入IConfigurationStartup类中。因此,您将能够在该ConfigureServices方法期间登录。但是,您可以将记录器注入Configure方法并在那里记录:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger<Startup> logger)
{
    logger.LogInformation("Configure called");

    // ...
}

如果您绝对 需要
在其中登录ConfigureServices,那么您可以继续使用WebHostBuilder这将创建WebHost可以将记录器注入到Startup类中的遗产。请注意,Web
主机可能会在将来的某个时候被删除。因此,您应该尝试找到适合您的解决方案,而无需登录ConfigureServices.


.NET 核心 2.x

随着 ASP.NET Core 2.0 的发布,这种情况发生了显着变化。在 ASP.NET Core 2.x
中,日志记录是在主机生成器中创建的。这意味着默认情况下可以通过 DI 使用日志记录,并且可以将其注入到Startup类中:

public class Startup
{
    private readonly ILogger<Startup> _logger;

    public IConfiguration Configuration { get; }

    public Startup(ILogger<Startup> logger, IConfiguration configuration)
    {
        _logger = logger;
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        _logger.LogInformation("ConfigureServices called");

        // ...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        _logger.LogInformation("Configure called");

        // ...
    }
}
2022-07-16