Ist .NET Core 2.0 Protokollierung kaputt?
Ich kann nicht scheinen, um die Trace-Stufe log-Informationen ausgegeben, die nach der Aktualisierung auf .NET Core 2.0 (+ASP.NET Core 2.0).
In der Tat, wenn ich einen dotnet new web
Projekt, und fügen Sie den folgenden code in Start-up Konfigurieren, ich bekomme keine trace-oder debug-log-Nachrichten, aber ich bekomme die Informationen und Fehlermeldungen zweimal. Auskommentieren der .AddConsole()
nennen wird diese Ausgabe (Daten und Fehler) nur einmal - was darauf hindeutet, dass es wird automatisch konfiguriert, mit einer Konsole provider standardmäßig. Beachten Sie, dies ist ein "Datei -> Neues" Projekt Erfahrung, es gibt nichts, das setup im Program.cs
für die Anmeldung oder Konfiguration für diese - außer für das, was ich Hinzugefügt habe. Jemand gesehen, was? Oder sollte ich mich registrieren GitHub Problem für Sie.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Microsoft.Extensions.Logging.LogLevel.Trace);
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
var logger = loggerFactory.CreateLogger("Blah");
logger.LogTrace("Hello world : Trace");
logger.LogDebug("Hello world : Debug");
logger.LogInformation("Hello world : Information");
logger.LogError("Hello world : Error");
await context.Response.WriteAsync("Hello World!");
});
}
will give me them once
Was meinst du damit?- Bearbeitet; ich bekomme Info und Fehler zweimal - aber wenn ich meine AddConsole() Zeile - ich bekomme die Info und den Fehler einmal, aber noch keine Spur von Debug-Meldungen an alle-mit oder ohne meine ausdrückliche Linie zu sagen, dass Konsole und Trace-level.
- Sind Sie in der Entwicklung? Standard-Umgebung ist nun die Produktion.. man kann versuchen
set ASPNETCORE_ENVIRONMENT=Development; dotnet run
- Ich lief in ein ähnliches Problem. Hinzufügen eines
await Task.Delay(1)
nach der Protokollierung Aussagen bekommt die Konsole auf Protokolle anzeigen. Wenn Es es aus, nur teilweise Protokolle werden auf der Konsole angezeigt. Die akzeptierte Antwort nicht wirklich etwas tun. Es scheint ein threading-Problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Art und Weise der Protokollierung konfiguriert ist, hat sich ein wenig geändert... Der empfohlene Weg (und es ist ziemlich gut dokumentiert in diese GitHub-issue - /Ankündigung es jetzt zu tun ist, konfigurieren Sie den Logger auf das
AddLogging
Methode, wieHaben und ein
appsettings.json
wieBeachten Sie
Scheint ein paar Leute sind verwirrt, weil das Beispiel zeigt, nur die Konfiguration
Console
Anbieter und nicht alle Logger.Den
LogLevel
Abschnitt konfiguriert die Protokollierungsstufe für alle namespaces (Default
- Taste) oder für einen bestimmten namespace (System
überschreibt den Standardwert für alle Klassen Anmeldung, deren namespace beginnt mitSystem.*
.Dies ist für die Klasse verwendet, in
T
imILogger<T>
). Dieses ermöglicht eine höhere oder niedrigere als die Standard-logging-level für den Logger aus diesem namespace.Bitte beachten Sie, dass die Struktur der appsettings.json geändert von, was Sie verwendete, zu sein in .NET-Core-1.x und dass
Logging
Eintrag in derappsettings.json
jetzt hat logger-provider-Namen in der it, das ermöglicht Ihnen das konfigurieren der Protokollierung Ebenen pro logging provider.Zuvor, wird der Eintrag in
appsettings.json
würde nur für die Konsole logger.Alternativ das logging kann nun in das
WebHostBuilder
statt.Update
Den Fall, dass einer nicht möchte das
appsettings.json
kann man registrieren der Filter-code zu.appsettings.json
Datei mit der Logging-Konfiguration ohne logging setup überhaupt scheint mir gibst, was ich brauche.builder.SetMinimumLevel(LogLevel.Trace);
AddConfiguration
erfordert dieMicrosoft.Extensions.Configuration
Paket.Debug.WriteLine
und selbst wenn,Debug.WriteLine
hat eine conditonal-operator und nicht kompiliert builds, überprüfen Sie die msdn.appsettings.json
zu werden falsch für .NET Core 2.1, diese funktionierte für mich docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/...LogLevel
Abschnitt fehlen dürfen, das legt die Standard-logging-level für alle - Logger, obwohl die Konsole Logger war die Frage in der Frage). Auch fühlen sich frei, um zu suggerieren ein edit 🙂Console
. Wie konfigurieren Sie es für Ihre Anforderung war nicht Teil der Frage. DieDefault
setzt man es für alle namespaces, dieMicrosoft
überschreibt es für alleMicrosoft.*
namespacesInformation
oder niedriger fürDefault
, und legen SieTrace
level etc. für einen bestimmten namespace, die Sie möchten, angemeldet haben/im detail verfolgt. Warum ich fragte war, weil die oben nicht funktioniert, aber vielleicht nicht, wie Sie es erwarten, da nur gezeigt, wie man setup-console-logger, nicht alle loggerVerbrachte ich fast zwanzig Minuten zu erkennen, dass seit
Configuration.GetSection("Logging")
im Start.cs Datei liest den Abschnitt"Logging"
aus der config in die appsettings.json - Datei, die konfiguriert wurde, als"Error"
. Ändern Sie es zu"Information"
oder etwas tiefer, das Problem.Hier ist, was die appsettinsg.json - Datei jetzt aussieht:
Um mehr zu erfahren über die Stufen der Protokollierung (wie in
"Information"
), check-out diese link, der auch Allgemeine Informationen über ASP.NET Kern-Protokollierung.Bin ich nur hier veröffentlichen, nur für den Fall, Sie stoßen keine Probleme mit bekommen, die Protokollierung zu arbeiten, stellen Sie sicher, dass Sie schon durch, dass die JSON-Datei.
Nichts von den oben genannten arbeiten für mich
Der einzige workaround war, schreiben Sie eine Methode
sowie bei der Verwendung der AddLogging Erweiterung Methode Schreibe es als
.ConfigureLogging((hostingContext, logging) => { ... logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); ... })
Folgende Struktur
appsettings.json
scheint gut zu funktionieren:Entnommen https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.1
Siehe auch, was Ihre start-up-Anrufe sind, finde ich die folgenden arbeiten für mich: