Delen via


Providers voor logboekregistratie in .NET

Logboekregistratieproviders behouden logboeken, met uitzondering van de Console-provider, die alleen logboeken als standaarduitvoer weergeeft. De Azure Application Insights-provider slaat bijvoorbeeld logboeken op in Azure Application Insights. Meerdere providers kunnen worden ingeschakeld.

De standaardsjablonen voor .NET Worker-apps:

using Microsoft.Extensions.Hosting;

using IHost host = Host.CreateApplicationBuilder(args).Build();

// Application code should start here.

await host.RunAsync();

In de voorgaande code ziet u de Program klasse die is gemaakt met de .NET Worker-app-sjablonen. De volgende secties bevatten voorbeelden op basis van de .NET Worker-app-sjablonen, die gebruikmaken van de algemene host.

Als u de standaardset logboekregistratieproviders wilt overschrijven die zijn toegevoegd door Host.CreateApplicationBuilder, roept u ClearProviders aan en voegt u de gewenste logboekregistratieproviders toe. Bijvoorbeeld de volgende code:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Logging.ClearProviders();
builder.Logging.AddConsole();

Zie voor aanvullende providers:

Een service configureren die afhankelijk is van ILogger

Als u een service wilt configureren die afhankelijk is van ILogger<T>, gebruikt u constructorinjectie of geeft u een fabrieksmethode op. De factorymethode wordt alleen aangeraden als er geen andere optie is. Denk bijvoorbeeld aan een service die een ILogger<T> exemplaar van DI nodig heeft:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Services.AddSingleton<IExampleService>(
    container => new DefaultExampleService
    {
        Logger = container.GetRequiredService<ILogger<IExampleService>>()
    });

De voorgaande code is een Func<IServiceProvider, IExampleService> die wordt uitgevoerd wanneer de DI-container voor het eerst een exemplaar van IExampleServicemoet maken. U hebt op deze manier toegang tot alle geregistreerde services.

Ingebouwde providers voor logboekregistratie

Microsoft Extensions omvatten de volgende providers voor logboekregistratie als onderdeel van de runtimebibliotheken:

De volgende providers voor logboekregistratie worden geleverd door Microsoft, maar niet als onderdeel van de runtimebibliotheken. Ze moeten worden geïnstalleerd als extra NuGet-pakketten.

Console

De Console provider registreert uitvoer naar de console.

Debuggen

De Debug provider schrijft logboekuitvoer met behulp van de System.Diagnostics.Debug-klasse, met name via de Debug.WriteLine methode en alleen wanneer het foutopsporingsprogramma is gekoppeld. De DebugLoggerProvider maakt exemplaren van een loggerklasse die de ILogger-interface implementeert.

Gebeurtenisbron

De EventSource provider schrijft naar een platformoverschrijdende gebeurtenisbron met de naam Microsoft-Extensions-Logging. In Windows gebruikt de provider ETW-.

hulpprogramma's voor dotnet-tracering

Het dotnet-trace hulpprogramma is een platformoverschrijdend CLI-hulpprogramma waarmee .NET Core-traceringen van een actief proces kunnen worden verzameld. Het hulpprogramma verzamelt Microsoft.Extensions.Logging.EventSource providergegevens met behulp van een LoggingEventSource.

Zie dotnet-trace voor installatie-instructies. Zie Fouten opsporen in hoog CPU-gebruik in .NET Corevoor een diagnostische zelfstudie met behulp van dotnet-trace.

Windows Logboek

De EventLog-provider verzendt logboekuitvoer naar het Windows-gebeurtenislogboek. In tegenstelling tot de andere providers erft de EventLog provider niet de standaardinstellingen voor een niet-provider. Als EventLog logboekinstellingen niet zijn opgegeven, worden ze standaard ingesteld op LogLevel.Warning.

Als u gebeurtenissen wilt vastleggen die lager zijn dan LogLevel.Warning, stelt u het logboekniveau expliciet in. In het volgende voorbeeld wordt het standaardlogboekniveau van het gebeurtenislogboek ingesteld op LogLevel.Information:

"Logging": {
  "EventLog": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

AddEventLog-overbelasting kan EventLogSettingsdoorgeven. Als null niet is opgegeven, worden de volgende standaardinstellingen gebruikt:

  • LogName: "Toepassing"
  • SourceName: '.NET Runtime'
  • MachineName: de naam van de lokale computer wordt gebruikt.

Met de volgende code wordt de SourceName gewijzigd van de standaardwaarde van ".NET Runtime" in CustomLogs:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Logging.AddEventLog(
    config => config.SourceName = "CustomLogs");

using IHost host = builder.Build();

host.Run();

Azure App Service

Het Microsoft.Extensions.Logging.AzureAppServices providerpakket schrijft logboeken naar tekstbestanden in het bestandssysteem van een Azure App Service-app en naar blobopslag in een Azure Storage-account.

Het providerpakket is niet opgenomen in de runtimebibliotheken. Als u de provider wilt gebruiken, voegt u het providerpakket toe aan het project.

Als u providerinstellingen wilt configureren, gebruikt u AzureFileLoggerOptions en AzureBlobLoggerOptions, zoals wordt weergegeven in het volgende voorbeeld:

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();

Wanneer de app is geïmplementeerd in Azure App Service, worden de instellingen in de App Service-logboeken sectie van de pagina App Service van Azure Portal gebruikt. Wanneer de volgende instellingen worden bijgewerkt, worden de wijzigingen onmiddellijk van kracht zonder dat de app opnieuw hoeft te worden opgestart of opnieuw hoeft te worden geïmplementeerd.

De standaardlocatie voor logboekbestanden bevindt zich in de map D:\home\LogFiles\Application. Aanvullende standaardwaarden variëren per provider:

  • Application Logging (Filesystem): De standaard bestandsnaam van het bestandssysteem is diagnostics-yyyymmdd.txt. De standaardlimiet voor de bestandsgrootte is 10 MB en het standaard maximum aantal bewaarde bestanden is 2.
  • Application Logging (Blob): De standaard-blobnaam is {app-name}/jjjj/mm/dd/hh/{guid}_applicationLog.txt.

Deze provider registreert alleen wanneer het project wordt uitgevoerd in de Azure-omgeving.

Azure-logboekstreaming

Azure-logboekstreaming biedt ondersteuning voor het weergeven van logboekactiviteiten in realtime vanuit:

  • De app-server
  • De webserver
  • Tracering van mislukte aanvragen

Om Azure-logstreaming te configureren:

  • Navigeer naar de App Service-logboeken pagina vanaf de portalpagina van de app.
  • Stel application logging (bestandssysteem) in op On.
  • Kies het logboek niveau. Deze instelling is alleen van toepassing op Azure-logboekstreaming.

Navigeer naar de pagina Logstream om logs weer te geven. De vastgelegde berichten worden vastgelegd met de ILogger interface.

Azure Application Insights

Het Microsoft.Extensions.Logging.ApplicationInsights providerpakket schrijft logboeken naar Azure Application Insights-. Application Insights is een service die een web-app bewaakt en hulpprogramma's biedt voor het opvragen en analyseren van de telemetriegegevens. Als u deze provider gebruikt, kunt u uw logboeken opvragen en analyseren met behulp van de Application Insights-hulpprogramma's.

Zie de volgende bronnen voor meer informatie:

Ontwerpoverwegingen voor logboekregistratieprovider

Als u van plan bent om uw eigen implementatie van de ILoggerProvider-interface en de bijbehorende aangepaste implementatie van ILoggerte ontwikkelen, moet u rekening houden met de volgende punten:

  • De ILogger.Log-methode is synchronisch.
  • De levensduur van de logboekstatus en -objecten moet niet worden aangenomen.

Een implementatie van ILoggerProvider maakt een ILogger via de ILoggerProvider.CreateLogger methode. Als uw implementatie streeft naar het vastleggen van berichten in de wachtrij op een niet-blokkerende manier, moeten de berichten eerst worden gerealiseerd of moet de objectstatus die wordt gebruikt om een logboekvermelding te materialiseren, worden geserialiseerd. Hiermee voorkomt u mogelijke uitzonderingen van vrijgegeven objecten.

Zie Een aangepaste logboekregistratieprovider implementeren in .NETvoor meer informatie.

Externe logboekregistratieproviders

Hier volgen enkele frameworks voor logboekregistratie van derden die werken met verschillende .NET-workloads:

Sommige frameworks van derden kunnen semantische logboekregistratie uitvoeren, ook wel gestructureerde logboekregistratie genoemd.

Het gebruik van een framework van derden is vergelijkbaar met het gebruik van een van de ingebouwde providers:

  1. Voeg een NuGet-pakket toe aan uw project.
  2. Roep een ILoggerFactory- of ILoggingBuilder-extensiemethode aan die wordt geleverd door het framework voor logboekregistratie.

Zie de documentatie van elke provider voor meer informatie. Externe logboekregistratieproviders worden niet ondersteund door Microsoft.

Zie ook