Udostępnij za pośrednictwem


Dostawcy logowania na platformie .NET

Dostawcy rejestrowania utrwalają dzienniki, z wyjątkiem dostawcy Console, który wyświetla tylko dzienniki jako standardowe dane wyjściowe. Na przykład dostawca usługi Azure Application Insights przechowuje dzienniki w usłudze Azure Application Insights. Można włączyć wielu dostawców.

Domyślne szablony aplikacji .NET Worker:

using Microsoft.Extensions.Hosting;

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

// Application code should start here.

await host.RunAsync();

Powyższy kod przedstawia klasę Program utworzoną przy użyciu szablonów aplikacji Worker platformy .NET. W kolejnych sekcjach przedstawiono przykłady oparte na szablonach aplikacji procesów roboczych platformy .NET, które korzystają z hosta ogólnego.

Aby zastąpić domyślny zestaw dostawców rejestrowania dodanych przez Host.CreateApplicationBuilder, wywołaj ClearProviders i dodaj żądanych dostawców rejestrowania. Na przykład następujący kod:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

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

Aby zobaczyć dodatkowych dostawców, zobacz:

Konfigurowanie usługi, która zależy od protokołu ILogger

Aby skonfigurować usługę, która zależy od ILogger<T>, użyj iniekcji konstruktora lub podaj metodę fabryki. Metoda fabryki jest zalecana tylko wtedy, gdy nie ma innej opcji. Rozważmy na przykład usługę, która wymaga instancji ILogger<T> dostarczonej przez DI.

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

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

Przedstawiony kod to Func<IServiceProvider, IExampleService>, który jest wykonywany, gdy kontener DI po raz pierwszy musi skonstruować wystąpienie IExampleService. W ten sposób możesz uzyskać dostęp do dowolnych zarejestrowanych usług.

Wbudowani dostawcy rejestrowania

Rozszerzenia firmy Microsoft obejmują następujące dostawniki logowania w ramach bibliotek środowiska uruchomieniowego.

Następujący dostawcy rejestrowania są dostarczani przez firmę Microsoft, ale nie jako część bibliotek środowiska uruchomieniowego. Muszą być instalowane jako dodatkowe pakiety NuGet.

Konsola

Dostawca Console rejestruje dane wyjściowe na konsolę.

Debugować

Dostawca Debug zapisuje dane wyjściowe dziennika przy użyciu klasy System.Diagnostics.Debug, w szczególności za pośrednictwem metody Debug.WriteLine i tylko wtedy, gdy debuger jest dołączony. DebugLoggerProvider tworzy instancje klasy rejestratora, która implementuje interfejs ILogger.

Źródło zdarzeń

Dostawca EventSource zapisuje do źródła zdarzeń międzyplatformowych o nazwie Microsoft-Extensions-Logging. W systemie Windows dostawca używa ETW.

dotnet trace tooling (narzędzia do śledzenia dotnet)

Narzędzie dotnet-trace to uniwersalne narzędzie globalne CLI, które umożliwia zbieranie śladów .NET Core uruchomionego procesu. Narzędzie zbiera dane dostawcy Microsoft.Extensions.Logging.EventSource przy użyciu LoggingEventSource.

Aby uzyskać instrukcje dotyczące instalacji, zobacz dotnet-trace. Aby zapoznać się z samouczkiem diagnostycznym korzystającym z dotnet-trace, zobacz Debugowanie wysokiego użycia procesora CPU na platformie .NET Core.

Dziennik zdarzeń systemu Windows

Dostawca EventLog wysyła dane wyjściowe dziennika do dziennika zdarzeń systemu Windows. W przeciwieństwie do innych dostawców dostawca EventLog nie dziedziczy domyślne ustawienia inne niż dostawcy. Jeśli ustawienia dziennika EventLog nie są określone, przyjmują domyślnie wartość LogLevel.Warning.

Aby rejestrować zdarzenia niższe niż LogLevel.Warning, należy jawnie ustawić poziom logowania. Poniższy przykład ustawia domyślny poziom dziennika zdarzeń na LogLevel.Information:

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

przeciążenia addEventLog mogą przekazywać EventLogSettings. Jeśli null nie zostało określone, są używane następujące ustawienia domyślne:

  • LogName: "Aplikacja"
  • SourceName: ".NET Runtime"
  • MachineName: używana jest nazwa komputera lokalnego.

Poniższy kod zmienia SourceName z wartości domyślnej ".NET Runtime" na CustomLogs:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

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

using IHost host = builder.Build();

host.Run();

Azure App Service

Pakiet dostawcy Microsoft.Extensions.Logging.AzureAppServices zapisuje dzienniki w plikach tekstowych w systemie plików aplikacji usługi Azure App Service oraz w celu magazynu obiektów blob na koncie usługi Azure Storage.

Pakiet dostawcy nie jest uwzględniony w bibliotekach środowiska uruchomieniowego. Aby użyć dostawcy, dodaj pakiet dostawcy do projektu.

Aby skonfigurować ustawienia dostawcy, użyj AzureFileLoggerOptions i AzureBlobLoggerOptions, jak pokazano w poniższym przykładzie:

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

Po wdrożeniu w Azure App Service aplikacja korzysta z ustawień sekcji dzienników usługi App Service na stronie App Service w portalu Azure. Po zaktualizowaniu następujących ustawień zmiany zostaną zastosowane natychmiast bez konieczności ponownego uruchamiania lub ponownego wdrażania aplikacji.

Domyślna lokalizacja plików dziennika znajduje się w folderze D:\home\LogFiles\Application. Dodatkowe wartości domyślne różnią się w zależności od dostawcy:

  • Rejestrowanie aplikacji (system plików): nazwa domyślnego pliku systemu plików to diagnostics-yyyymmdd.txt. Domyślny limit rozmiaru pliku wynosi 10 MB, a domyślna maksymalna liczba zachowywanych plików to 2.
  • Rejestrowanie aplikacji (Blob): Domyślna nazwa obiektu blob to {app-name}/rrrr/mm/dd/hh/{guid}_applicationLog.txt.

Ten dostawca rejestruje tylko wtedy, gdy projekt działa w środowisku platformy Azure.

Przesyłanie strumieniowe dzienników platformy Azure

Przesyłanie strumieniowe dzienników platformy Azure obsługuje wyświetlanie aktywności dziennika w czasie rzeczywistym z:

  • Serwer aplikacji
  • Serwer internetowy
  • Śledzenie żądań, które zakończyło się niepowodzeniem

Aby skonfigurować przesyłanie strumieniowe dzienników platformy Azure:

  • Przejdź do strony dzienników usługi App Service na stronie portalu aplikacji.
  • Ustaw Application Logging (Filesystem) na On.
  • Wybierz poziom dziennika. To ustawienie dotyczy tylko przesyłania strumieniowego dzienników platformy Azure.

Przejdź do strony strumienia dziennika, aby wyświetlić dzienniki. Zarejestrowane komunikaty są rejestrowane za pomocą interfejsu ILogger.

Azure Application Insights

Pakiet dostawcy Microsoft.Extensions.Logging.Logging.ApplicationInsights zapisuje dzienniki w usłudze Azure Application Insights. Application Insights to usługa, która monitoruje aplikację internetową i udostępnia narzędzia do wykonywania zapytań i analizowania danych telemetrycznych. Jeśli używasz tego dostawcy, możesz wykonywać zapytania i analizować dzienniki przy użyciu narzędzi usługi Application Insights.

Aby uzyskać więcej informacji, zobacz następujące zasoby:

Aspekty projektowania dostawcy rejestrowania

Jeśli planujesz opracowanie własnej implementacji interfejsu ILoggerProvider i odpowiedniej niestandardowej implementacji ILogger, rozważ następujące kwestie:

  • Metoda ILogger.Log jest synchroniczna.
  • Okres istnienia stanu dziennika i obiektów powinien nie zakładać.

Implementacja ILoggerProvider utworzy ILogger za pośrednictwem metody ILoggerProvider.CreateLogger. Jeśli implementacja ma na celu kolejkowanie komunikatów rejestrowania w sposób nieblokujący, komunikaty powinny najpierw zostać zmaterializowane lub stan obiektu używanego do materializowania wpisu dziennika powinien być serializowany. Pozwala to uniknąć potencjalnych wyjątków z powodu usuniętych obiektów.

Aby uzyskać więcej informacji, zobacz Implementowanie niestandardowego dostawcy rejestrowania na platformie .NET.

Zewnętrzni dostawcy dziennikowania

Poniżej przedstawiono niektóre struktury rejestrowania innych firm, które współpracują z różnymi obciążeniami platformy .NET:

Niektóre zewnętrzne biblioteki mogą wykonywać rejestrowanie semantyczne, nazywane również rejestrowaniem strukturalnym.

Korzystanie z platformy innej firmy jest podobne do korzystania z jednego z wbudowanych dostawców:

  1. Dodaj pakiet NuGet do projektu.
  2. Wywołaj metodę rozszerzenia ILoggerFactory lub ILoggingBuilder udostępnioną przez platformę rejestrowania.

Aby uzyskać więcej informacji, zobacz dokumentację każdego dostawcy. Zewnętrzni dostawcy rejestrowania nie są obsługiwani przez firmę Microsoft.

Zobacz też