Zprostředkovatelé protokolování v .NET
Zprostředkovatelé protokolování uchovávají protokoly s výjimkou poskytovatele Console
, který zobrazuje pouze protokoly jako standardní výstup. Například poskytovatel Azure Application Insights ukládá protokoly do služby Azure Application Insights. Je možné povolit více poskytovatelů.
Výchozí šablony aplikace .NET Worker:
- Použijte obecného hostitele.
- Volání CreateApplicationBuilder, které přidává následující zprostředkovatele protokolování:
- konzoly
- ladění
- EventSource
- Protokol událostí (pouze pro Windows)
using Microsoft.Extensions.Hosting;
using IHost host = Host.CreateApplicationBuilder(args).Build();
// Application code should start here.
await host.RunAsync();
Předchozí kód ukazuje třídu Program
vytvořenou pomocí šablon aplikací .NET Worker. V následujících několika částech najdete ukázky založené na šablonách aplikace .NET Worker, které používají obecného hostitele.
Chcete-li nahradit výchozí sadu zprostředkovatelů protokolování, které přidal Host.CreateApplicationBuilder
, zavolejte ClearProviders
a přidejte zprostředkovatele protokolování podle vašeho výběru. Například následující kód:
- Zavolá se ClearProviders, aby odstranil všechny instance ILoggerProvider ze sestavovače.
- Přidá zprostředkovatele protokolování konzoly .
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
Další poskytovatelé najdete tady:
Konfigurace služby, která závisí na ILoggeru
Ke konfiguraci služby, která závisí na ILogger<T>
, použijte vložení konstruktoru nebo zadejte tovární metodu. Přístup metody továrny se doporučuje jenom v případě, že neexistuje žádná jiná možnost. Představte si například službu, která potřebuje instanci ILogger<T>
, kterou poskytuje DI:
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Services.AddSingleton<IExampleService>(
container => new DefaultExampleService
{
Logger = container.GetRequiredService<ILogger<IExampleService>>()
});
Předchozí kód je Func<IServiceProvider, IExampleService>, který spouští poprvé, když kontejner DI potřebuje sestavit instanci IExampleService
. Tímto způsobem můžete přistupovat ke všem registrovaným službám.
Předdefinovaní poskytovatelé protokolování
Rozšíření Microsoftu zahrnují následující zprostředkovatele protokolování jako součást knihoven modulu runtime:
- konzoly
- ladění
- EventSource
- Protokol událostí
Microsoft dodává následující zprostředkovatele protokolování, ale ne jako součást knihoven modulu runtime. Musí být nainstalované jako další balíčky NuGet.
- AzureAppServicesFile a AzureAppServicesBlob
- ApplicationInsights
Konzola
Poskytovatel Console
zapisuje výstup do konzoly.
Ladění
Poskytovatel Debug
zapisuje výstup protokolu pomocí třídy System.Diagnostics.Debug, konkrétně metody Debug.WriteLine a pouze když je ladicí program připojen.
DebugLoggerProvider vytvoří instance třídy loggeru, která implementuje rozhraní ILogger
.
Zdroj událostí
Poskytovatel EventSource
zapisuje do zdroje událostí pro různé platformy s názvem Microsoft-Extensions-Logging
. Ve Windows poskytovatel používá windows pro Windows.
dotnet trace tooling
Nástroj dotnet-trace je globální nástroj příkazového řádku pro různé platformy, který umožňuje sběr tras .NET Core běžícího procesu. Nástroj shromažďuje data poskytovatele Microsoft.Extensions.Logging.EventSource pomocí LoggingEventSource.
Pokyny k instalaci najdete v dotnet-trace. Diagnostický kurz s využitím dotnet-trace
najdete v tématu Ladění vysokého využití procesoru v .NET Core.
Protokol událostí windows
Poskytovatel EventLog
odesílá výstup protokolu do protokolu událostí systému Windows. Na rozdíl od ostatních poskytovatelů EventLog
poskytovatel nezdědí výchozí nastavení pro ne-poskytovatele. Pokud nejsou nastavení protokolu EventLog
specifikována, ve výchozím nastavení se použijí LogLevel.Warning
.
Pokud chcete protokolovat události nižší než LogLevel.Warning, explicitně nastavte úroveň protokolu. Následující příklad nastaví výchozí úroveň protokolu událostí na LogLevel.Information:
"Logging": {
"EventLog": {
"LogLevel": {
"Default": "Information"
}
}
}
AddEventLog přetížení mohou předávat EventLogSettings. Pokud zadáte null
nebo pokud to nezadáte, použijí se následující výchozí nastavení:
-
LogName
: "Aplikace" -
SourceName
: .NET Runtime -
MachineName
: Používá se název místního počítače.
Následující kód změní SourceName
z výchozí hodnoty ".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
Balíček poskytovatele Microsoft.Extensions.Logging.AzureAppServices zapisuje protokoly do textových souborů v systému souborů aplikace Azure App Service a úložiště objektů blob v účtu Azure Storage.
Balíček zprostředkovatele není součástí knihoven modulu runtime. Pokud chcete poskytovatele použít, přidejte do projektu balíček zprostředkovatele.
Ke konfiguraci nastavení poskytovatele použijte AzureFileLoggerOptions a AzureBlobLoggerOptions, jak je znázorněno v následujícím příkladu:
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();
Když je aplikace nasazená do služby Azure App Service, použije nastavení v protokolech služby App Service části stránky App Service webu Azure Portal. Po aktualizaci následujících nastavení se změny projeví okamžitě bez nutnosti restartování nebo opětovného nasazení aplikace.
Výchozí umístění souborů protokolu je ve složce D:\home\LogFiles\Application. Další výchozí hodnoty se liší podle poskytovatele:
- protokolování aplikace (Filesystem): Výchozí název souboru systému souborů je diagnostics-yyyymmdd.txt. Výchozí limit velikosti souboru je 10 MB a výchozí maximální počet uchovávaných souborů je 2.
- protokolování aplikace (Blob): Výchozí název objektu blob je {app-name}/yyyy/mm/dd/hh/{guid}_applicationLog.txt.
Tento poskytovatel protokoluje pouze při spuštění projektu v prostředí Azure.
Streamování protokolů Azure
Streamování protokolů Azure podporuje zobrazování aktivit protokolu v reálném čase z:
- Aplikační server
- Webový server
- Trasování neúspěšných požadavků
Pro konfiguraci streamování protokolů v Azure:
- Na stránce portálu aplikace přejděte na stránku protokoly služby App Service.
- Nastavte protokolování aplikace (systém souborů) na Zapnuto.
- Zvolte úroveň protokolu . Toto nastavení platí pouze pro streamování protokolů Azure.
Přejděte na stránku Log Stream a zobrazte protokoly. Protokolované zprávy jsou zaznamenány pomocí rozhraní ILogger
.
Azure Application Insights
Balíček zprostředkovatele Microsoft.Extensions.Logging.ApplicationInsights zapisuje protokoly do Azure Application Insights. Application Insights je služba, která monitoruje webovou aplikaci a poskytuje nástroje pro dotazování a analýzu telemetrických dat. Pokud používáte tohoto poskytovatele, můžete dotazovat a analyzovat protokoly pomocí nástrojů Application Insights.
Další informace najdete v následujících zdrojích informací:
- Přehled Application Insights
- ApplicationInsightsLoggerProvider pro protokolování ILogger v .NET Core – Pokud chcete implementovat zprostředkovatele protokolování bez zbytku telemetrie Application Insights, začněte tady.
- adaptéry pro protokolování Application Insights.
- instalace, konfigurace a inicializace sady Application Insights SDK – interaktivní kurz na webu Microsoft Learn.
Aspekty návrhu poskytovatele protokolování
Pokud plánujete vytvořit vlastní implementaci ILoggerProvider rozhraní a odpovídající vlastní implementaci ILogger, zvažte následující body:
- Metoda ILogger.Log je synchronní.
- Životnost stavu protokolu a objektů by se měla se nepředpokládá.
Implementace ILoggerProvider
vytvoří ILogger
metodou ILoggerProvider.CreateLogger. Pokud se vaše implementace snaží zařazovat zprávy protokolování do fronty neblokujícím způsobem, měly by být zprávy nejprve materializovány, nebo by se měl serializovat stav objektu, který se používá k materializaci položky protokolu. Tím se vyhnete potenciálním výjimkám z odstraněných objektů.
Další informace naleznete v tématu Implementace vlastního zprostředkovatele protokolování v rozhraní .NET.
Zprostředkovatelé protokolování třetích stran
Tady jsou některé architektury protokolování třetích stran, které pracují s různými úlohami .NET:
- elmah.io (úložiště GitHub)
- EFLogger (GitHub úložiště)
- Gelf (úložiště GitHub)
- JSNLog (úložiště GitHub)
- KissLog.net (úložiště GitHub)
- Log4Net (úložiště GitHub)
- NLog (úložiště GitHubu)
- NReco.Logging (úložiště GitHub)
- Sentry (úložiště GitHub)
- Serilog (úložiště GitHub)
- StackDriver (úložiště GitHub)
Některé architektury třetích stran mohou provádět sémantické protokolování, označované také jako strukturované protokolování.
Použití architektury třetí strany se podobá použití některého z předdefinovaných poskytovatelů:
- Přidejte do projektu balíček NuGet.
- Volejte metodu rozšíření
ILoggerFactory
neboILoggingBuilder
, kterou poskytuje architektura protokolování.
Další informace najdete v dokumentaci jednotlivých poskytovatelů. Microsoft nepodporuje poskytovatele protokolování třetích stran.