Loggningsleverantörer i .NET
Loggningsproviders bevarar loggar, förutom Console
-providern, som endast visar loggar som standardutdata. Azure Application Insights-providern lagrar till exempel loggar i Azure Application Insights. Flera leverantörer kan aktiveras.
Standardappmallarna för .NET Worker:
- Använd allmän värd.
- Anropa CreateApplicationBuilder, som lägger till följande loggningstjänster:
- Konsol
- Felsöka
- EventSource
- EventLog (Endast Windows)
using Microsoft.Extensions.Hosting;
using IHost host = Host.CreateApplicationBuilder(args).Build();
// Application code should start here.
await host.RunAsync();
Föregående kod visar den Program
-klass som skapats med .NET Worker-appmallarna. De kommande avsnitten innehåller exempel baserat på .NET Worker-appmallarna, som använder den generiska värden.
Om du vill åsidosätta standarduppsättningen med loggningsproviders som lagts till av Host.CreateApplicationBuilder
anropar du ClearProviders
och lägger till de loggningsproviders som du vill använda. Till exempel följande kod:
- Anropar ClearProviders för att ta bort alla ILoggerProvider instanser från byggaren.
- Lägger till Console loggningsprovider.
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
Ytterligare leverantörer finns i:
Konfigurera en tjänst som är beroende av ILogger
För att konfigurera en tjänst som är beroende av ILogger<T>
, använd konstruktionsinjektion eller tillhandahåll en fabriksmetod. Factorymetoden rekommenderas endast om det inte finns något annat alternativ. Tänk dig till exempel en tjänst som behöver en ILogger<T>
instans som tillhandahålls av DI:
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Services.AddSingleton<IExampleService>(
container => new DefaultExampleService
{
Logger = container.GetRequiredService<ILogger<IExampleService>>()
});
Föregående kod är en Func<IServiceProvider, IExampleService> som körs första gången DI-containern behöver konstruera en instans av IExampleService
. Du kan komma åt någon av de registrerade tjänsterna på det här sättet.
Inbyggda loggningstjänster
Microsoft-tillägg inkluderar följande loggningstjänster som en del av plattformens körbibliotek.
Följande loggningstjänster levereras av Microsoft, men inte som en del av körbiblioteken. De måste installeras som ytterligare NuGet-paket.
Konsol
Console
-providerloggar utdata till konsolen.
Felsöka
Debug
-providern skriver loggutdata med hjälp av klassen System.Diagnostics.Debug, särskilt via metoden Debug.WriteLine och endast när felsökningsprogrammet är kopplat.
DebugLoggerProvider skapar instanser av en logger-klass som implementerar ILogger
-gränssnittet.
Händelsekälla
EventSource
-providern skriver till en plattformsoberoende händelsekälla med namnet Microsoft-Extensions-Logging
. I Windows använder providern ETW-.
dotnet-spårverktyg
Verktyget dotnet-trace är ett plattformsoberoende globalt CLI-verktyg som möjliggör insamling av .NET Core-spårningar av en process som körs. Verktyget samlar in Microsoft.Extensions.Logging.EventSource leverantörsdata med hjälp av en LoggingEventSource.
Installationsinstruktioner finns i dotnet-trace. För en diagnostisk handledning med dotnet-trace
, se Felsöka hög CPU-användning i .NET Core.
Windows EventLog
EventLog
-providern skickar loggutdata till Windows-händelseloggen. Till skillnad från de andra leverantörerna ärver EventLog
providern inte ärver standardinställningarna för icke-provider. Om EventLog
logginställningar inte har angetts används LogLevel.Warning
som standard.
Om du vill logga händelser som är lägre än LogLevel.Warninganger du uttryckligen loggnivån. I följande exempel anges standardloggnivån för händelseloggen till LogLevel.Information:
"Logging": {
"EventLog": {
"LogLevel": {
"Default": "Information"
}
}
}
AddEventLog-överlagringar kan skickas EventLogSettings. Om null
eller inte anges används följande standardinställningar:
-
LogName
: "Applikation" -
SourceName
: ".NET Runtime" -
MachineName
: Namnet på den lokala datorn används.
Följande kod ändrar SourceName
från standardvärdet för ".NET Runtime"
till CustomLogs
:
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Logging.AddEventLog(
config => config.SourceName = "CustomLogs");
using IHost host = builder.Build();
host.Run();
Azure App Service
Microsoft.Extensions.Logging.AzureAppServices-providerpaketet skriver loggar till textfiler i en Azure App Service-apps filsystem och till bloblagring i ett Azure Storage-konto.
Providerpaketet ingår inte i körningsbiblioteken. Om du vill använda providern lägger du till providerpaketet i projektet.
Om du vill konfigurera providerinställningar använder du AzureFileLoggerOptions och AzureBlobLoggerOptions, enligt följande exempel:
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();
När den distribueras till Azure App Service använder appen inställningarna i avsnittet App Service-loggar på sidan App Service i Azure-portalen. När följande inställningar uppdateras börjar ändringarna gälla omedelbart utan att appen behöver startas om eller distribueras om.
Standardplatsen för loggfiler finns i mappen D:\home\LogFiles\Application. Ytterligare standardvärden varierar beroende på leverantör:
- Application Logging (Filesystem): Standardfilsystemets filnamn är diagnostics-yyyymmdd.txt. Standardgränsen för filstorlek är 10 MB och det maximala standardantalet filer som behålls är 2.
- Application Logging (Blob): Standardblobnamnet är {app-name}/åååå/mm/dd/hh/{guid}_applicationLog.txt.
Den här providern loggar bara när projektet körs i Azure-miljön.
Azure-loggströmning
Azure-loggströmning stöder visning av loggaktivitet i realtid från:
- Appservern
- Webbservern
- Spårning av misslyckade begäranden
Så här konfigurerar du Azure-loggströmning:
- Gå till loggsidan App Service från appens portalsida.
- Ange Application Logging (Filesystem) till På.
- Välj loggen nivå. Den här inställningen gäller endast för Azure-loggströmning.
Gå till sidan Log Stream för att visa loggar. De loggade meddelandena loggas med ILogger
-gränssnittet.
Azure Application Insights
Providerpaketet Microsoft.Extensions.Logging.ApplicationInsights skriver loggar till Azure Application Insights. Application Insights är en tjänst som övervakar en webbapp och tillhandahåller verktyg för att fråga och analysera telemetridata. Om du använder den här providern kan du fråga och analysera dina loggar med hjälp av Application Insights-verktygen.
Mer information finns i följande resurser:
- översikt över Application Insights
- ApplicationInsightsLoggerProvider för .NET Core ILogger-loggar – Börja här om du vill implementera loggningsprovidern utan resten av Application Insights-telemetrin.
- Application Insights-loggningsadapter.
- Installera, konfigurera och initiera Application Insights SDK- – interaktiv självstudie på Microsoft Learn-webbplatsen.
Designöverväganden för loggningsprovider
Om du planerar att utveckla din egen implementering av ILoggerProvider-gränssnittet och motsvarande anpassad implementering av ILoggerbör du tänka på följande:
- Metoden ILogger.Log är synkron.
- Livslängden för loggtillstånd och objekt ska inte tas för given.
En implementering av ILoggerProvider
skapar en ILogger
via dess ILoggerProvider.CreateLogger-metod. Om implementeringen strävar efter att köa loggningsmeddelanden på ett icke-blockerande sätt bör meddelandena först materialiseras eller objekttillståndet som används för att materialisera en loggpost ska serialiseras. På så sätt undviks potentiella undantag från borttagna objekt.
Mer information finns i Implementera en anpassad loggningsprovider i .NET.
Leverantörer av loggning från tredje part
Här följer några loggningsramverk från tredje part som fungerar med olika .NET-arbetsbelastningar:
- elmah.io (GitHub-lagringsplats)
- EFLogger (GitHub-lagringsplats)
- Gelf (GitHub-lagringsplats)
- JSNLog (GitHub-lagringsplats)
- KissLog.net (GitHub-lagringsplats)
- Log4Net (GitHub-lagringsplats)
- NLog (GitHub-lagringsplats)
- NReco.Logging (GitHub-lagringsplats)
- Sentry (GitHub-lagringsplats)
- Serilog (GitHub-lagringsplats)
- Stackdriver (GitHub-lagringsplats)
Vissa ramverk från tredje part kan utföra semantisk loggning, även kallat strukturerad loggning.
Att använda ett ramverk från tredje part liknar att använda någon av de inbyggda leverantörerna:
- Lägg till ett NuGet-paket i projektet.
- Anropa en
ILoggerFactory
- ellerILoggingBuilder
-tilläggsmetod från loggningsramverket.
Mer information finns i dokumentationen för varje leverantör. Loggningsleverantörer från tredje part stöds inte av Microsoft.