为了调试在启动时失败的 .NET Core 应用程序,我想从 startup.cs 文件中写入日志。我在文件中有日志记录设置,可以在 startup.cs 文件之外的应用程序的其余部分中使用,但不确定如何从 startup.cs 文件本身写入日志。
.Net 核心 3.1
不幸的是,对于 ASP.NET Core 3.0,情况又有点不同。默认模板使用HostBuilder(而不是WebHostBuilder),它设置了一个新的通用主机,可以托管多个不同的应用程序,不限于 Web 应用程序。这个新主机的一部分还删除了以前为 Web 主机存在的第二个依赖注入容器。这最终意味着您将能够将除 之外的任何依赖项注入IConfiguration到Startup类中。因此,您将能够在该ConfigureServices方法期间登录。但是,您可以将记录器注入Configure方法并在那里记录:
HostBuilder
WebHostBuilder
IConfiguration
Startup
ConfigureServices
Configure
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger<Startup> logger) { logger.LogInformation("Configure called"); // ... }
如果您绝对 需要 在其中登录ConfigureServices,那么您可以继续使用WebHostBuilder这将创建WebHost可以将记录器注入到Startup类中的遗产。请注意,Web 主机可能会在将来的某个时候被删除。因此,您应该尝试找到适合您的解决方案,而无需登录ConfigureServices.
WebHost
.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"); // ... } }