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:
- Sie verwenden den generischen Host.
- Rufen Sie CreateApplicationBuilderauf, wodurch die folgenden Protokollierungsanbieter hinzugefügt werden:
- Konsole
- Debug
- EventSource
- EventLog (nur Windows)
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.CreateApplicationBuilder
hinzugefü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:
- Ruft ClearProviders auf, um alle ILoggerProvider Instanzen aus dem Generator zu entfernen.
- Fügt den Konsolen-Protokollierungsanbieter hinzu.
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 IExampleService
erstellt. 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-trace
finden 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.Warning
festgelegt.
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 CustomLogs
geä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:
- Application Insights-Übersicht
- ApplicationInsightsLoggerProvider für .NET Core ILogger-Protokolle – Starten Sie hier, wenn Sie den Protokollierungsanbieter ohne die restliche Application Insights-Telemetrie implementieren möchten.
- Application Insights logging adapters (Adapter zur Protokollierung für Application Insights).
- Installieren, Konfigurieren und Initialisieren des Application Insights SDK – Interaktives Lernprogramm auf der Microsoft Learn-Website.
Ü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:
- elmah.io (GitHub-Repository-)
- EFLogger (GitHub-Repository)
- Gelf (GitHub-Repository)
- JSNLog (GitHub-Repository)
- KissLog.net (GitHub-Repository)
- Log4Net (GitHub-Repository)
- NLog (GitHub-Repository)
- NReco.Logging (GitHub-Repository)
- Sentry (GitHub-Repository)
- Serilog (GitHub Repository)
- Stackdriver (GitHub-Repository)
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:
- Fügen Sie Ihrem Projekt ein NuGet-Paket hinzu.
- Rufen Sie eine vom Protokollierungsframework bereitgestellte
ILoggerFactory
- oderILoggingBuilder
-Erweiterungsmethode auf.
Weitere Informationen finden Sie in der Dokumentation der einzelnen Anbieter. Protokollierungsanbieter von Drittanbietern werden von Microsoft nicht unterstützt.