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:
- Créer un nouveau ASP.NET application de Base à l'aide de Visual Studio 2017.
- (Facultatif) commentaire
.UseApplicationInsights()
de sorte que la repro est plus clair -
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" }; } } }
-
Changement
appsettings.Development.json
:{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Trace", "System": "Information", "Microsoft": "Information" } } }
-
Exécuter et d'afficher la sortie de Débogage
Ce qui conduit à:
-
De sortie réelle:
-
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"
}
}
}
OriginalL'auteur Jeroen | 2017-05-28
Vous devez vous connecter pour publier un commentaire.
Où se trouve le problème...
Basé sur votre
Configure()
méthode, j'ai remarqué un problème:C'est la raison pour laquelle aucun de vos modifications à la configuration définie dans le
appsettings.json
fichiers ne fonctionne pas.Si vous voulez explicitement définie à l'utilisation d'un minimum de Niveau, vous pouvez passer directement à la
AddDebug(ILoggerFactory, LogLevel)
méthode.Plus d'informations peuvent être trouvées ici.
De liaison à votre configuration.
Méthode 1: Saisir la valeur de la configuration.
Méthode 2: Utilisation de l'objet intégré pour LogLevel
(Intentionnellement laissé de côté. Évidemment, il se trouve serré entre ces deux méthodes proposées.) Je serais favorable à l'un des extrêmes, que d'aller à mi-chemin)
Méthode 3: Aller Manuelle (utilisation ConfigurationBinder)
La fantaisie
ConfigurationBinder
qui correspondra à un objet comme
de sorte que vous pourrait alors transmettre:
Remarque spéciale sur les nœuds et appsettings.json
Noter que le délimiteur pour la configuration utilise
:
.Exemple:
"Logging:LogLevel"
ira:LogLevel Enum
Juste pour référence, voici la validité de la
LogLevel
valeurs:Source:
https://docs.microsoft.com/en-us/aspnet/core/api/microsoft.extensions.logging.loglevel#Microsoft_Extensions_Logging_LogLevel
Debug
ouVerbose
.. Il n'y a pas une telle option commeTrace
Il n'y a
Verbose
une fois, mais il a été changé peu de temps entre les deux ASP.NET Core 1.0 RC1 et RC2Je vais mettre à jour ma réponse.
La modification de votre réponse a un sens, et travaille. Auriez-vous par hasard connais un bon moyen de re-utiliser la section de Configuration? Il semble qu'il n'y est pas de surcharge pour
AddDebug
qui en prend un, ou est-il?Peut-être intéressant de noter, que cela va changer avec la 2.0 (déjà en vigueur dans la 2.0 aperçus): Rupture de la Journalisation des modifications et des ajouts, ce qui permet la configuration de la journalisation de tous les fournisseurs via le appsettings.json
OriginalL'auteur Svek
Cela a fonctionné pour moi. L'ajouter dans la
ConfigureServices(IServiceCollection services)
méthode:OriginalL'auteur Juan Carlos Puerto