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:
- Użyj Host ogólny.
- Wywołaj CreateApplicationBuilder, który dodaje następujących dostawców logów:
- Konsola
- Debugowanie
- EventSource
- EventLog (tylko system Windows)
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:
- Wywołuje ClearProviders, aby usunąć wszystkie wystąpienia ILoggerProvider z konstruktora.
- Dodaje dostawcę rejestrowania konsoli .
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:
- omówienie usługi Application Insights
- ApplicationInsightsLoggerProvider dla dzienników ILogger platformy .NET Core — zacznij tutaj, jeśli chcesz zaimplementować dostawcę rejestrowania bez pozostałej części telemetrii usługi Application Insights.
- Adaptery dziennikowania usługi Application Insights.
- Instalowanie, konfigurowanie i inicjowanie zestawu SDK usługi Application Insights — interaktywny samouczek w witrynie Microsoft Learn.
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:
- elmah.io (repozytorium GitHub)
- EFLogger (repozytorium GitHub)
- Gelf (repozytorium GitHub)
- JSNLog (repozytorium GitHub)
- KissLog.net (repozytorium GitHub)
- Log4Net (repozytorium GitHub)
- NLog (repozytorium GitHub)
- NReco.Logging (repozytorium GitHub)
- Sentry (repozytorium GitHub)
- Serilog (repozytorium GitHub)
- Stackdriver (repozytorium GitHub)
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:
- Dodaj pakiet NuGet do projektu.
- Wywołaj metodę rozszerzenia
ILoggerFactory
lubILoggingBuilder
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.