Dela via


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:

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.CreateApplicationBuilderanropar ClearProviders du 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

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-tracei 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 EventLoginte 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-loggarApp 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 .
  • 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:

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:

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 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.

Se även