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:
- używają hosta ogólnego;
- Wywołaj metodę CreateApplicationBuilder, która dodaje następujących dostawców rejestrowania:
- Konsola
- Debug
- 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 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.CreateApplicationBuilder
usługę , wywołaj ClearProviders
i dodaj żądanych dostawców rejestrowania. Na przykład następujący kod:
- wywołuje klasę ClearProviders w celu usunięcia wszystkich wystąpień ILoggerProvider z konstruktora,
- dodaje dostawcę rejestrowania Console.
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
Aby uzyskać informacje o dodatkowych dostawcach, zobacz:
- Wbudowani dostawcy rejestrowania.
- Zewnętrzni dostawcy rejestrowania
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 IExampleService
klasy . 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 EventLog
nie 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:
- Omówienie usługi Application Insights
- Dostawca 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 rejestrowania usługi Application Insights.
- Instalowanie, konfigurowanie i inicjowanie zestawu SDK usługi Application Insights — interaktywny samouczek w witrynie Microsoft Learn.
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:
- elmah.io (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 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:
- Dodaj pakiet NuGet do projektu.
- 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.