Sdílet prostřednictvím


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:

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:

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.

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-tracenajdete 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í:

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:

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ů:

  1. Přidejte do projektu balíček NuGet.
  2. Volejte metodu rozšíření ILoggerFactory nebo ILoggingBuilder, kterou poskytuje architektura protokolování.

Další informace najdete v dokumentaci jednotlivých poskytovatelů. Microsoft nepodporuje poskytovatele protokolování třetích stran.

Viz také