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

标签 c# asp.net-core

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

最佳答案

.Net 核心 3.1

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

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

    // …
}

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


.NET 核心 2.x

随着 ASP.NET Core 2.0 的发布,这发生了显着变化。在 ASP.NET Core 2.x 中,日志记录是在主机生成器中创建的。这意味着默认情况下可以通过 DI 进行日志记录,并且可以将其注入(inject)到 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");

        // …
    }
}

关于c# - 如何从 Startup.cs 中写入日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41287648/

相关文章:

c# - Environment.GetFolderPath(Environment.SpecialFolder.SOMETHING)

c# - 查询数据库,如果用户名和密码存在则登录

asp.net-core - 如何检查 ASP.NET Core RC2/1.0 Razor View 的编译错误?

c# - 返回 ObjectResult 结果为 406 Not Acceptable

c# - 当 T 不同时,是否可以获取 List<T> 的项目数?

c# - 跨语言共享环境变量

c# - 在不违反 DDD 聚合原则的情况下为 DI 公开实体 CRUD

c# - 如何访问 MVC .net 核心中返回的 Controller 的字段结果

c# - 在 .net Core、C# 中并行调用 API 调用的最佳方式是什么?

c# - dotnet 运行 - MissingMethodException