Share via


Providers voor logboekregistratie in .NET

Logboekregistratieproviders behouden logboeken, met uitzondering van de Console provider, die alleen logboeken als standaarduitvoer weergeeft. De Azure-toepassing Insights-provider slaat bijvoorbeeld logboeken op in Azure-toepassing 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 ClearProviders u de gewenste logboekregistratieproviders aan en voegt u deze 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 ILogger<T>van, gebruikt u constructorinjectie of levert u een fabrieksmethode. De methodemethode factory wordt alleen aanbevolen 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.

Fouten opsporen

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. Hiermee DebugLoggerProvider worden exemplaren gemaakt van een loggerklasse waarmee de ILogger interface wordt geïmplementeerd.

Bron van gebeurtenis

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-globaal 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 Core voor een diagnostische zelfstudie.dotnet-trace

Windows EventLog

De EventLog provider verzendt logboekuitvoer naar het Windows-gebeurtenislogboek. In tegenstelling tot de andere providers neemt de EventLog provider niet de standaardinstellingen voor niet-provider over. Als EventLog er geen logboekinstellingen 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 ingesteld op LogLevel.Information:

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

AddEventLog-overbelastingen kunnen worden EventLogSettingsdoorgegeven. Als null dit 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 standaardwaarde gewijzigd in ".NET Runtime"CustomLogs:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

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

using IHost host = builder.Build();

host.Run();

Azure App Service

Het providerpakket Microsoft.Extensions.Logging.AzureAppServices 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 AzureFileLoggerOptions u 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 sectie App Service-logboeken van de App Service-pagina 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:

  • Toepassingslogboeken (bestandssysteem): de standaardbestandsnaam van het bestandssysteem is diagnostics-yyyymmdd.txt. De standaardlimiet voor de bestandsgrootte is 10 MB en het standaard maximum aantal bewaarde bestanden is 2.
  • Toepassingslogboeken (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

Azure-logboekstreaming configureren:

  • Navigeer naar de pagina App Service-logboeken vanaf de portalpagina van de app.
  • Stel Toepassingslogboeken (bestandssysteem) in op Aan.
  • Kies het logboekniveau. Deze instelling is alleen van toepassing op Azure-logboekstreaming.

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

Azure Application Insights

Het providerpakket Microsoft.Extensions.Logging.ApplicationInsights schrijft logboeken naar Azure-toepassing 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.

Voor meer informatie raadpleegt u de volgende bronnen:

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 synchroon.
  • De levensduur van de logboekstatus en -objecten mag niet worden aangenomen.

Er wordt een ILogger implementatie gemaakt ILoggerProvider via de ILoggerProvider.CreateLogger bijbehorende 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. Hierdoor voorkomt u mogelijke uitzonderingen op verwijderingsobjecten.

Zie Een aangepaste logboekregistratieprovider implementeren in .NET voor 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