Aktivieren der Trace-Protokollierung in ASP.NET Core?
Ich kann nicht basice LogTrace(...)
Ausgabe in meiner Anwendung. Hier eine repro:
- Erstellen Sie eine neue ASP.NET Core-Anwendung mithilfe von Visual Studio 2017.
- (Optional) Kommentar aus
.UseApplicationInsights()
so die repro ist klarer -
Ersetzen Sie den code in
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" }; } } }
-
Ändern
appsettings.Development.json
:{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Trace", "System": "Information", "Microsoft": "Information" } } }
-
Ausführen und anzeigen der Debug-Ausgabe
Dies führt zu:
-
Aktuelle Ausgabe:
-
Erwartete Ausgabe wäre die "SPUR!" - Nachricht
Habe ich versucht, das individuelle anpassen der Werte in der appsettings.json
Datei als gut, aber das hatte keine Wirkung.
Komischerweise, und ändern Sie den Wert in beiden Dateien auf "Error"
nicht alles tun, entweder.
Unteren Zeile /Frage
Was muss ich tun, um meine injiziert ILogger<ValuesController>
hinsichtlich der logging-Einstellungen, einschließlich Trace
Ebene?
Fußnote
Ist hier einige von den relevanten code, der automatisch generiert wird mit den oben genannten 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
Standard:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
InformationsquelleAutor Jeroen | 2017-05-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
, Wo das problem liegt...
Basierend auf Ihrem
Configure()
Methode, die ich entdeckt haben ein Problem:Dies ist der Grund, warum keine der änderungen an der Konfiguration in der
appsettings.json
Dateien nicht funktioniert.Wenn Sie wollen explizit einstellen, dass es eine bestimmte Mindest-LogLevel, dann können Sie übergeben es direkt an der
AddDebug(ILoggerFactory, LogLevel)
Methode.Mehr Informationen finden Sie hier.
Bindung an Ihre Konfiguration.
Methode 1: nehmen Sie den Wert aus der Konfiguration.
Methode 2: Verwenden der built-in-Objekt für die LogLevel
(Absichtlich ausgelassen. Natürlich es sitzt sich gemütlich zwischen diesen zwei Methoden angeboten.) Ich wäre für eine von den extremen, als auf halbem Weg zu gehen)
Methode 3: Gehen Sie Manuell (verwenden Sie ConfigurationBinder)
Fancy
ConfigurationBinder
die Karte, um ein Objekt wie
also man könnte dann passieren:
Besonderer Hinweis zu Knoten und appsettings.json
Beachten Sie, dass das Trennzeichen für die Konfiguration verwendet
:
.Beispiel:
"Logging:LogLevel"
gehen wird:LogLevel Enum
Nur als Referenz, hier sind die gültigen
LogLevel
Werte:Quelle:
https://docs.microsoft.com/en-us/aspnet/core/api/microsoft.extensions.logging.loglevel#Microsoft_Extensions_Logging_LogLevel
Debug
oderVerbose
.. Es gibt keine solche option alsTrace
Es war
Verbose
einmal, aber es wurde geändert, einige Zeit dazwischen ASP.NET Core 1.0 RC1 und RC2Ich werde aktualisieren, meine Antwort.
Ihre veränderte Antwort, die Sinn macht, und funktioniert. Würden Sie geschehen, zu wissen, ein guter Weg, um re-nutzen Sie die Konfigurations-Abschnitt? Es scheint, es ist keine überladung für die
AddDebug
dass man nimmt, oder ist es?Könnte sein, erwähnenswert, dass dieses gonna change mit 2.0 (bereits in Kraft in der 2.0-Vorschau): Breaking Protokollierung von änderungen und Ergänzungen, das erlauben wird die Konfiguration aller logging-Anbieter über appsettings.json
InformationsquelleAutor Svek
Dieser arbeitete für mich. Fügen Sie in der
ConfigureServices(IServiceCollection services)
Methode:InformationsquelleAutor Juan Carlos Puerto