Udostępnij za pośrednictwem


Dostawcy rejestrowania na platformie .NET

Dostawcy rejestrowania utrwalają dzienniki, z wyjątkiem Console dostawcy, 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 procesów roboczych 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.CreateApplicationBuilderusługę , 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 uzyskać informacje o dodatkowych dostawcach, zobacz:

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

Aby skonfigurować usługę zależną od ILogger<T>, użyj wstrzykiwania konstruktora lub podaj metodę tworzącą. Metoda fabryki jest zalecana tylko wtedy, gdy nie ma innej opcji. Rozważmy na przykład usługę, która wymaga wystąpienia ILogger<T> dostarczanego przez DI:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

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

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

Wbudowani dostawcy rejestrowania

Rozszerzenia firmy Microsoft obejmują następujących dostawców rejestrowania 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 w konsoli.

Debugowanie

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

Źródło zdarzenia

Dostawca EventSource zapisuje w międzyplatformowym źródle zdarzeń o nazwie Microsoft-Extensions-Logging. W systemie Windows dostawca używa funkcji ETW.

Narzędzia dotnet trace

Narzędzie dotnet-trace jest międzyplatformowym globalnym narzędziem interfejsu wiersza polecenia, które umożliwia zbieranie śladów platformy .NET Core uruchomionego procesu. Narzędzie to zbiera dane dostawcy Microsoft.Extensions.Logging.EventSource przy użyciu klasy LoggingEventSource.

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

Windows EventLog

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

Aby rejestrować zdarzenia o poziomie niższym niż LogLevel.Warning należy jawnie ustawić poziom dziennika. W poniższym przykładzie domyślny poziom dziennika dla dziennika zdarzeń jest ustawiony na LogLevel.Information:

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

Przeciążenia AddEventLog mogą przekazywać element EventLogSettings. Jeśli wartość wynosi null lub nie jest określona, używane są następujące ustawienia domyślne:

  • LogName: „Application”
  • SourceName: „.NET Runtime”
  • MachineName: używana jest nazwa komputera lokalnego.

Poniższy kod zmienia wartość parametru SourceName z wartości domyślnej ".NET Runtime" na wartość 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 i w magazynie obiektów blob na koncie usługi Azure Storage.

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

Aby skonfigurować ustawienia dostawcy, użyj klas 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 usłudze Azure App Service aplikacja używa ustawień z sekcji Dzienniki usługi App Service na stronie usługi App Service w witrynie Azure Portal. Po zaktualizowaniu następujących ustawień zmiany są stosowane natychmiast bez konieczności ponownego uruchamiania lub ponownego wdrażania aplikacji.

Domyślną lokalizacją plików dziennika jest folder D:\home\LogFiles\Application . Dodatkowe wartości domyślne różnią się w zależności od dostawcy:

  • Rejestrowanie aplikacji (system plików): domyślna nazwa 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 (obiekt blob): domyślna nazwa obiektu blob to {app-name}/rrrr/mm/dd/hh/{guid}_applicationLog.txt.

Ten dostawca rejestruje tylko wtedy, gdy projekt jest uruchomiony 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:

  • serwera aplikacji
  • serwera internetowego
  • śledzenia żądań zakończonego niepowodzeniem

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

  • Przejdź do strony Dzienniki usługi App Service na stronie portalu aplikacji.
  • Dla opcji Rejestrowanie aplikacji (system plików) ustaw wartość Włączone.
  • Wybierz poziom dziennika. To ustawienie dotyczy tylko przesyłania strumieniowego dzienników platformy Azure.

Przejdź do strony Strumień dziennika, aby wyświetlić dzienniki. Komunikaty są rejestrowane za pomocą interfejsu ILogger.

Azure Application Insights

Pakiet dostawcy Microsoft.Extensions.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:

Zagadnienia dotyczące projektowania dostawcy rejestrowania

Jeśli planujesz opracować własną implementację interfejsu ILoggerProvider i odpowiednią niestandardową implementację ILoggerprogramu , rozważ następujące kwestie:

  • Metoda ILogger.Log jest synchroniczna.
  • Nie należy zakładać okresu istnienia stanu dziennika i obiektów.

Implementacja ILoggerProvider metody spowoduje utworzenie obiektu ILogger za pomocą metody ILoggerProvider.CreateLogger . Jeśli implementacja dąży do kolejkowania komunikatów rejestrowania w sposób nieblokujący, komunikaty powinny być najpierw zmaterializowane lub stan obiektu używany do materializowania wpisu dziennika powinien być serializowany. Pozwala to uniknąć potencjalnych wyjątków od usuniętych obiektów.

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

Zewnętrzni dostawcy rejestrowania

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

Niektóre struktury innych firm mogą wykonywać rejestrowanie semantyczne, znane również jako rejestrowanie strukturalne.

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

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

Aby uzyskać więcej informacji, zapoznaj się z dokumentacją każdego z dostawców. Zewnętrzni dostawcy rejestrowania nie są obsługiwani przez firmę Microsoft.

Zobacz też