web-dev-qa-db-ja.com

実稼働モードのときにASP.NET Core 2.0でコンソールを削除してロガーをデバッグする

ASP.NET Core 2.0ではこれがあります

_public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .Build();
_

CreateDefaultBuilder(args)には多くの便利なデフォルトがあります。ただし、 これを含む

_.ConfigureLogging((context, logging) => {
    logging.AddConfiguration(context.Configuration.GetSection("Logging"));
    logging.AddConsole();   // HERE IS THE PROBLEM
    logging.AddDebug();     // HERE IS THE PROBLEM
})
_

そのため、コンソールおよびデバッグロギングプロバイダーは常に登録されます。

以前はこのように登録していました

_if (env.IsDevelopment())
{ 
    // register them here
}
_

実稼働モードで実行しているときに、それらを削除/登録解除するにはどうすればよいですか? ログレベルを変更することを意味するのではなく、プロダクションモードでそれらをまったく登録したくないことを意味します。

22
grokky

これを行うdesigned方法は、これらのプロバイダーに何も記録しないようにロギング構成を変更することです。しかし、私はあなたが本番の呼び出しを削除したいことを理解しています。コードでこれを適切に行うことができます。

HostBuilderContextラムダに渡されるConfigureLoggingからホスティング環境に簡単にアクセスできます。

.ConfigureLogging((context, logging) =>
{
    logging.AddConfiguration(context.Configuration.GetSection("Logging"));

    if (context.HostingEnvironment.IsDevelopment())
    {
        logging.AddConsole();
        logging.AddDebug();
    }
});

明らかに、これだけではCreateDefaultBuilder呼び出しが既に設定したものを取り消すのに役立ちません。まず、これらのプロバイダーの登録を解除する必要があります。そのために、新しい ILoggingBuilder.ClearProviders メソッド:

.ConfigureLogging((context, logging) =>
{
    // clear all previously registered providers
    logging.ClearProviders();

    // now register everything you *really* want
    // …
});

これは GitHubでのこのロギングの問題 に対応して導入されました。

34
poke

CreateDefaultBuilderを使用することも、LogLevelsをNoneに設定することもできないと思います。ドキュメントによると、これを使用できます。

public static void Main(string[] args)
{
var webHost = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .ConfigureAppConfiguration((hostingContext, config) =>
    {
        var env = hostingContext.HostingEnvironment;
        config.AddJsonFile("appsettings.json", optional: true, 
reloadOnChange: true)
              .AddJsonFile($"appsettings.{env.EnvironmentName}.json", 
optional: true, reloadOnChange: true);
        config.AddEnvironmentVariables();
    })
    .ConfigureLogging((hostingContext, logging) =>
    {


logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
        logging.AddConsole();
        logging.AddDebug();
    })
    .UseStartup<Startup>()
    .Build();

webHost.Run();
}

プロバイダーセクションを追加する方法 https://docs.Microsoft.com/en-us/aspnet/core/fundamentals/logging?tabs=aspnetcore2x

別のオプションが見つかりました。appsettings.jsonにコンソールのログフィルタを追加するだけです

  "Logging": {
"IncludeScopes": false,
"LogLevel": {
  "Default": "Debug",
  "System": "Information",
  "Microsoft": "Information"
},
"Console": {
  "LogLevel": {
    "Default": "None"
  }
}

}、

3
Lee Reitz