Comment faire pour activer la journalisation du suivi dans ASP.NET Core?

Je ne peux pas obtenir basice LogTrace(...) de sortie dans mon application. Voici une repro:

  1. Créer un nouveau ASP.NET application de Base à l'aide de Visual Studio 2017.
  2. (Facultatif) commentaire .UseApplicationInsights() de sorte que la repro est plus clair
  3. Remplacez le code dans ValuesController.cs:

    using System.Collections.Generic;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;
    
    namespace WebApplication1.Controllers
    {
        [Route("api/[controller]")]
        public class ValuesController : Controller
        {
            private readonly ILogger<ValuesController> logger;
    
            public ValuesController(ILogger<ValuesController> logger)
            {
                this.logger = logger;
            }
    
            [HttpGet]
            public IEnumerable<string> Get()
            {
                logger.LogError("ERROR!");
                logger.LogWarning("WARN!");
                logger.LogInformation("INFO!");
                logger.LogTrace("TRACE!");
                return new string[] { "value1", "value2" };
            }
        }
    }
  4. Changement appsettings.Development.json:

    {
      "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
          "Default": "Trace",
          "System": "Information",
          "Microsoft": "Information"
        }
      }
    }
  5. Exécuter et d'afficher la sortie de Débogage

Ce qui conduit à:

  • De sortie réelle:

    Comment faire pour activer la journalisation du suivi dans ASP.NET Core?

  • Sortie attendue serait la "TRACE!" message ainsi

J'ai essayé de modifier les valeurs dans le appsettings.json fichier en tant que bien, mais cela n'a eu aucun effet.

Bizarrement, la modification de la valeur dans le fichier de "Error" ne rien faire non plus.

Ligne De Fond /Question

Que dois-je faire pour que mon injecté ILogger<ValuesController> respecter les paramètres de journalisation, y compris Trace niveau?


Note de bas de page

Voici le code qui serait auto-générés avec au-dessus de repro:

Startup.cs

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }

    //This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        //Add framework services.
        services.AddMvc();
    }

    //This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseMvc();
    }
}

Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseApplicationInsights()
            .Build();

        host.Run();
    }
}

appsettings.json par défaut:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}
Juste un heads-up... Il y aura des modifications importantes au sujet de cette question de la 2.0 (crédit à @Tseng ). J'ai mis à jour ma réponse en conséquence.

OriginalL'auteur Jeroen | 2017-05-28