Freigeben über


Protokollierungsanbieter in .NET

Protokollierungsanbieter speichern Protokolle, mit Ausnahme des Console-Anbieters, der nur Protokolle als Standardausgabe anzeigt. Beispielsweise speichert der Azure Application Insights-Anbieter Protokolle in Azure Application Insights. Mehrere Anbieter können aktiviert werden.

Die standardmäßigen .NET Worker-App-Vorlagen:

using Microsoft.Extensions.Hosting;

using IHost host = Host.CreateApplicationBuilder(args).Build();

// Application code should start here.

await host.RunAsync();

Der vorherige Code zeigt die Program Klasse, die mit den .NET Worker-App-Vorlagen erstellt wurde. Die nächsten Abschnitte enthalten Beispiele basierend auf den .NET Worker-App-Vorlagen, die den generischen Host verwenden.

Um die standardmäßig von Host.CreateApplicationBuilderhinzugefügte Gruppe von Protokollierungsanbietern außer Kraft zu setzen, rufen Sie ClearProviders auf und fügen Sie die gewünschten Protokollierungsanbieter hinzu. Beispiel: Der folgende Code:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Logging.ClearProviders();
builder.Logging.AddConsole();

Weitere Anbieter finden Sie unter:

Konfigurieren eines Diensts, der von ILogger abhängt

Um einen Dienst zu konfigurieren, der von ILogger<T>abhängt, verwenden Sie die Konstruktorinjektion oder stellen Sie eine Factory-Methode bereit. Es wird empfohlen, den Factory-Methode-Ansatz nur zu verwenden, wenn keine andere Option verfügbar ist. Betrachten Sie beispielsweise einen Dienst, der eine von DI bereitgestellte ILogger<T> Instanz benötigt:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Services.AddSingleton<IExampleService>(
    container => new DefaultExampleService
    {
        Logger = container.GetRequiredService<ILogger<IExampleService>>()
    });

Der vorangehende Code ist ein Func<IServiceProvider, IExampleService>, das ausgeführt wird, wenn der DI-Container zum ersten Mal eine Instanz von IExampleServiceerstellt. Sie können auf diese Weise auf jeden der registrierten Dienste zugreifen.

Integrierte Protokollierungsanbieter

Microsoft-Erweiterungen enthalten die folgenden Protokollierungsanbieter als Teil der Laufzeitbibliotheken:

Die folgenden Protokollierungsanbieter werden von Microsoft ausgeliefert, jedoch nicht als Teil der Laufzeitbibliotheken. Sie müssen als zusätzliche NuGet-Pakete installiert werden.

Konsole

Der Console-Anbieter protokolliert die Ausgabe in der Konsole.

Fehlersuche

Der Debug Anbieter schreibt die Protokollausgabe mithilfe der System.Diagnostics.Debug-Klasse, insbesondere über die Debug.WriteLine-Methode und nur, wenn der Debugger angefügt ist. Die DebugLoggerProvider erstellt Instanzen einer Loggerklasse, die die ILogger Schnittstelle implementiert.

Ereignisquelle

Der EventSource-Anbieter schreibt in eine plattformübergreifende Ereignisquelle mit dem Namen Microsoft-Extensions-Logging. Unter Windows verwendet der Anbieter ETW.

dotnet Trace-Werkzeuge

Das dotnet-trace--Tool ist ein plattformübergreifendes globales CLI-Tool, das die Sammlung von .NET Core-Ablaufverfolgungen eines laufenden Prozesses ermöglicht. Das Tool sammelt Microsoft.Extensions.Logging.EventSource-Anbieterdaten mithilfe einer LoggingEventSource.

Siehe dotnet-trace für Installationsanweisungen. Ein Diagnoseprogramm mit dotnet-tracefinden Sie unter Debuggen der hohen CPU-Auslastung in .NET Core.

Windows Ereignisprotokoll

Der EventLog-Anbieter sendet die Protokollausgabe an das Windows-Ereignisprotokoll. Im Gegensatz zu den anderen Anbietern erbt der EventLog-Anbieter nicht die Standardeinstellungen für Nicht-Anbieter. Wenn EventLog Protokolleinstellungen nicht angegeben sind, werden sie standardmäßig auf LogLevel.Warningfestgelegt.

Um Ereignisse unter LogLevel.Warningzu protokollieren, legen Sie die Protokollebene explizit fest. Im folgenden Beispiel wird die Standardprotokollebene des Ereignisprotokolls auf LogLevel.Informationfestgelegt:

"Logging": {
  "EventLog": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

AddEventLog-Überladungen können EventLogSettings übergeben. Wenn null nicht angegeben ist oder wenn es keine Angabe gibt, werden die folgenden Standardeinstellungen verwendet:

  • LogName: "Anwendung"
  • SourceName: ".NET Runtime"
  • MachineName: Der Name des lokalen Computers wird verwendet.

Mit dem folgenden Code wird der SourceName vom Standardwert ".NET Runtime" in CustomLogsgeändert:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Logging.AddEventLog(
    config => config.SourceName = "CustomLogs");

using IHost host = builder.Build();

host.Run();

Azure App Service

Das Anbieterpaket Microsoft.Extensions.Logging.AzureAppServices schreibt Protokolle in Textdateien in das Dateisystem einer Azure App Service-App und in Blob Storage in einem Azure Storage-Konto.

Das Anbieterpaket ist nicht in den Laufzeitbibliotheken enthalten. Um den Anbieter zu verwenden, fügen Sie das Anbieterpaket zum Projekt hinzu.

Verwenden Sie zum Konfigurieren von Anbietereinstellungen AzureFileLoggerOptions und AzureBlobLoggerOptions, wie im folgenden Beispiel gezeigt:

using Microsoft.Extensions.Logging.AzureAppServices;

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args)

builder.Logging.AddAzureWebAppDiagnostics();
builder.Services.Configure<AzureFileLoggerOptions>(options =>
{
    options.FileName = "azure-diagnostics-";
    options.FileSizeLimit = 50 * 1024;
    options.RetainedFileCountLimit = 5;
});
builder.Services.Configure<AzureBlobLoggerOptions>(options =>
{
    options.BlobName = "log.txt";
});

using IHost host = builder.Build();

// Application code should start here.

await host.RunAsync();

Wenn eine Bereitstellung in Azure App Service erfolgt, verwendet die App die Einstellungen im Abschnitt App Service logs (App Service-Protokolle) auf der Seite App Service im Azure-Portal. Wenn die folgenden Einstellungen aktualisiert werden, werden die Änderungen sofort wirksam, ohne dass ein Neustart oder eine erneute Bereitstellung der App erforderlich ist.

Der Standardspeicherort für Protokolldateien befindet sich im Ordner D:\home\LogFiles\Application. Zusätzliche Standardwerte variieren je nach Anbieter:

  • Anwendungsprotokollierung (Filesystem): Der Standarddateiname des Dateisystems ist diagnostics-yyyymmdd.txt. Die Standardmäßige Dateigrößenbeschränkung beträgt 10 MB, und die standardmäßige maximale Anzahl der aufbewahrten Dateien beträgt 2.
  • Anwendungsprotokollierung (Blob): Der Standard-BLOB-Name ist {app-name}/yyyy/mm/dd/hh/{guid}_applicationLog.txt.

Dieser Anbieter protokolliert nur, wenn das Projekt in der Azure-Umgebung ausgeführt wird.

Azure-Protokollstreaming

Azure-Protokollstreaming unterstützt das Anzeigen von Protokollaktivitäten in Echtzeit von:

  • Der App-Server
  • Der Webserver
  • Ablaufverfolgung fehlgeschlagener Anforderungen

So konfigurieren Sie Azure Log Streaming:

  • Navigieren Sie von der Portalseite Ihrer App zur Seite App Service-Protokolle.
  • Legen Sie Anwendungsprotokollierung (Dateisystem) auf Ein fest.
  • Wählen Sie die Protokollierungsebene. Diese Einstellung gilt nur für Azure-Protokollstreaming.

Navigieren Sie zur Seite Log Stream (Protokollstream), um Protokolle anzuzeigen. Die protokollierten Nachrichten werden mit der ILogger Schnittstelle protokolliert.

Azure Application Insights

Das Microsoft.Extensions.Logging.ApplicationInsights-Anbieterpaket schreibt Protokolle in Azure Application Insights. Application Insights ist ein Dienst, der eine Web-App überwacht und Tools zum Abfragen und Analysieren der Telemetriedaten bereitstellt. Wenn Sie diesen Anbieter verwenden, können Sie Ihre Protokolle mithilfe der Application Insights-Tools abfragen und analysieren.

Weitere Informationen finden Sie in den folgenden Ressourcen:

Überlegungen zum Entwurf des Protokollierungsanbieters

Wenn Sie eine eigene Implementierung der ILoggerProvider Schnittstelle und die entsprechende benutzerdefinierte Implementierung von ILoggerentwickeln möchten, sollten Sie die folgenden Punkte berücksichtigen:

  • Die ILogger.Log-Methode ist synchron.
  • Die Lebensdauer des Protokollzustands und der Objekte sollte nicht angenommen werden.

Eine Implementierung von ILoggerProvider erstellt über die ILoggerProvider.CreateLogger-Methode eine ILogger. Wenn Ihre Implementierung Protokollierungsmeldungen ohne Blockierung in die Warteschlange einreihen soll, sollten die Meldungen zuerst materialisiert werden, oder der Objektzustand, der zum Materialisieren eines Protokolleintrags verwendet wird, sollte serialisiert werden. Dadurch werden potenzielle Ausnahmen von verworfenen Objekten vermieden.

Weitere Informationen finden Sie unter Implementieren eines benutzerdefinierten Protokollierungsanbieters in .NET.

Protokollierungsanbieter von Drittanbietern

Hier sind einige Protokollierungsframeworks von Drittanbietern, die mit verschiedenen .NET-Workloads funktionieren:

Einige Drittanbieterframeworks können eine semantische Protokollierung (auch als strukturierte Protokollierung bezeichnet) ausführen.

Die Verwendung eines Drittanbieterframeworks ähnelt der Verwendung eines der integrierten Anbieter:

  1. Fügen Sie Ihrem Projekt ein NuGet-Paket hinzu.
  2. Rufen Sie eine vom Protokollierungsframework bereitgestellte ILoggerFactory- oder ILoggingBuilder-Erweiterungsmethode auf.

Weitere Informationen finden Sie in der Dokumentation der einzelnen Anbieter. Protokollierungsanbieter von Drittanbietern werden von Microsoft nicht unterstützt.

Siehe auch