通过 .NET Core 中的配置文件配置日志记录

Tho*_*her 6 logging .net-core asp.net-core

我们尝试通过配置文件(默认的 appsettings.json)为 ASP.NET Core 应用程序配置日志记录。该文档说这应该是可能的(https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1),但我们无法让它按预期工作。

到目前为止我们已经尝试过:

  • 保留 ASP.NET Core 项目模板中的代码,只需更改 appsettings.json => 无效
  • 显式添加 appsettings.json 作为配置文件并在 Program.cs 中配置日志记录 => 根本不记录日志
    public static IHostBuilder CreateHostBuilder (string[] args) =>
        Host.CreateDefaultBuilder (args)
            .ConfigureAppConfiguration ((hostingContext, config) =>
            {
              config.Sources.Clear ();

              var env = hostingContext.HostingEnvironment;

              config.AddJsonFile ("appsettings.json", optional: false, reloadOnChange: true)
                    .AddJsonFile ($"appsettings.{env.EnvironmentName}.json",
                        optional: true, reloadOnChange: true);

              config.AddEnvironmentVariables ();
            })
            .ConfigureLogging ((hostingContext, logging) =>
            {
              logging.ClearProviders ();

              logging.AddConfiguration (hostingContext.Configuration.GetSection ("Logging"));
            })
            .ConfigureWebHostDefaults (webBuilder =>
             {
               webBuilder.UseStartup<Startup> ();
             });
Run Code Online (Sandbox Code Playgroud)
  • ...在 Startup.ConfigureServices 中配置日志记录 => 无效
    public void ConfigureServices (IServiceCollection services)
    {
      services.AddLogging (config => config.AddConfiguration (Configuration.GetSection("Logging")));
      services.AddControllers ();
    }
Run Code Online (Sandbox Code Playgroud)

Chr*_*att 7

你误会了。您可以配置日志记录,即每个提供程序的日志级别、过滤消息等,但实际的提供程序必须在代码中分配。换句话说,您可以通过配置配置发送到控制台的消息,但您仍然必须logging.AddConsole()在内部调用ConfigureLogging以添加该提供程序。

您拥有的代码清除了所有默认提供程序并且不添加任何内容,因此根本没有提供程序,因此不会生成任何日志。您实际上无法通过配置添加提供程序,只需配置已添加的提供程序。