Dela via


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:

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.CreateApplicationBuilderanropar du ClearProviders och lägger till de loggningsproviders som du vill använda. Till exempel följande kod:

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.Warningsom 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 .
  • 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:

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:

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:

  1. Lägg till ett NuGet-paket i projektet.
  2. Anropa en ILoggerFactory- eller ILoggingBuilder-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.

Se även