Loggningsproviders i .NET
Loggningsproviders bevarar loggar, förutom providern Console
, 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 den allmänna värden.
- Anropa CreateApplicationBuilder, som lägger till följande loggningsproviders:
- Konsol
- Debug
- 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 klassen Program
som skapats med .NET Worker-appmallarna. Nästa avsnitt 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 ClearProviders
du 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 konsolens loggningsprovider .
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
Ytterligare leverantörer finns i:
- Inbyggda loggningsproviders.
- Loggningsproviders från tredje part.
Konfigurera en tjänst som är beroende av ILogger
Om du vill konfigurera en tjänst som är ILogger<T>
beroende av använder du konstruktorinmatning eller tillhandahåller en fabriksmetod. Metoden factory 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ör 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 loggningsproviders
Microsoft-tillägg innehåller följande loggningsproviders som en del av körningsbiblioteken:
Följande loggningsproviders levereras av Microsoft, men inte som en del av körningsbiblioteken. De måste installeras som ytterligare NuGet-paket.
Konsol
Providerloggarna Console
loggar utdata till konsolen.
Felsöka
Providern Debug
skriver loggutdata med hjälp System.Diagnostics.Debug av klassen, specifikt via Debug.WriteLine -metoden och endast när felsökningsprogrammet är kopplat. DebugLoggerProvider Skapar instanser av en logger-klass som implementerar ILogger
gränssnittet.
Händelsekälla
Providern EventSource
skriver till en plattformsoberoende händelsekälla med namnet Microsoft-Extensions-Logging
. I Windows använder providern ETW.
dotnet trace tooling
Dotnet-trace-verktyget ä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 providerdata med hjälp av en LoggingEventSource.
Se dotnet-trace för installationsinstruktioner. En diagnostisk självstudiekurs med hjälp av finns dotnet-trace
i Felsöka hög CPU-användning i .NET Core.
Windows EventLog
Providern EventLog
skickar loggutdata till Windows-händelseloggen. Till skillnad från de andra leverantörerna ärver providern EventLog
inte standardinställningarna för icke-provider. Om EventLog
logginställningarna inte har angetts är standardinställningen LogLevel.Warning
.
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 i EventLogSettings. Om null
du anger eller inte används följande standardinställningar:
LogName
: "Program"SourceName
: ".NET Runtime"MachineName
: Namnet på den lokala datorn används.
Följande kod ändrar SourceName
från standardvärdet ".NET Runtime"
för till CustomLogs
:
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Logging.AddEventLog(
config => config.SourceName = "CustomLogs");
using IHost host = builder.Build();
host.Run();
Azure App Service
Providerpaketet Microsoft.Extensions.Logging.AzureAppServices skriver loggar till textfiler i en Azure App Service-appfilsystem 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 AzureFileLoggerOptions du 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å App Service-sidan 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:
- Programloggning (Filsystem): Standardfilsystemets filnamn är diagnostics-yyyymmdd.txt. Standardgränsen för filstorlek är 10 MB och det maximala standardantalet filer som behålls är 2.
- Programloggning (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 förfrågningar
Så här konfigurerar du Azure-loggströmning:
- Gå till sidan App Service-loggar från appens portalsida.
- Ange Programloggning (Filsystem) till På.
- Välj loggnivå. 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-loggningskort.
- 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 bör inte antas.
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.
Loggningsproviders 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)
- 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 som tillhandahålls av loggningsramverket.
Mer information finns i dokumentationen för varje leverantör. Loggningsleverantörer från tredje part stöds inte av Microsoft.