Condividi tramite


Provider di registrazione in .NET

I provider di registrazione persistono i log, tranne il provider Console, che mostra solo i log come output standard. Ad esempio, il provider di Azure Application Insights archivia i log in Azure Application Insights. È possibile abilitare più provider.

Modelli di app .NET Worker predefiniti:

using Microsoft.Extensions.Hosting;

using IHost host = Host.CreateApplicationBuilder(args).Build();

// Application code should start here.

await host.RunAsync();

Il codice precedente mostra la classe Program creata con i modelli di app .NET Worker. Le sezioni successive forniscono esempi basati sui modelli di app di lavoro .NET, che usano l'host generico.

Per eseguire l'override del set predefinito di provider di registrazione aggiunti da Host.CreateApplicationBuilder, chiamare ClearProviders e aggiungere i provider di registrazione desiderati. Ad esempio, il codice seguente:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Logging.ClearProviders();
builder.Logging.AddConsole();

Per altri provider, vedere:

Configurare un servizio che dipende da ILogger

Per configurare un servizio che dipende da ILogger<T>, usare l'iniezione del costruttore o fornire un metodo factory. L'approccio del metodo factory è consigliato solo se non è disponibile un'altra opzione. Si consideri, ad esempio, un servizio che necessita di un'istanza di ILogger<T> fornita dall'inserimento delle dipendenze:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

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

Il codice precedente è un Func<IServiceProvider, IExampleService> che viene eseguito per la prima volta quando il DI container deve costruire un'istanza di IExampleService. È possibile accedere a qualsiasi servizio registrato in questo modo.

Provider di registrazione predefiniti

Le estensioni Microsoft includono i provider di registrazione seguenti come parte delle librerie di runtime:

I provider di registrazione seguenti vengono forniti da Microsoft, ma non come parte delle librerie di runtime. Devono essere installati come pacchetti NuGet aggiuntivi.

Console

L'output del provider Console viene registrato nella console.

Risoluzione dei problemi

Il provider Debug scrive l'output del log usando la classe System.Diagnostics.Debug, in particolare tramite il metodo Debug.WriteLine e solo quando il debugger è collegato. Il DebugLoggerProvider crea istanze di una classe logger che implementa l'interfaccia ILogger.

Origine dell'evento

Il provider EventSource scrive in un'origine di evento multipiattaforma con il nome Microsoft-Extensions-Logging. In Windows il provider usa ETW.

Strumenti di tracciamento .NET

Lo strumento dotnet-trace è uno strumento globale dell'interfaccia della riga di comando multipiattaforma che consente la raccolta di tracce .NET Core di un processo in esecuzione. Lo strumento raccoglie i dati del provider Microsoft.Extensions.Logging.EventSource usando un LoggingEventSource.

Per istruzioni sull'installazione, vedere dotnet-trace. Per un'esercitazione diagnostica sull'uso di dotnet-trace, vedere Eseguire il debug di un utilizzo elevato della CPU in .NET Core.

Registro eventi di Windows

Il provider EventLog invia l'output del log al registro eventi di Windows. A differenza degli altri provider, il provider di EventLog non eredita le impostazioni predefinite non del provider. Per impostazione predefinita, se non sono specificate le impostazioni del log EventLog, vengono utilizzate quelle di LogLevel.Warning.

Per registrare eventi inferiori a LogLevel.Warning, impostare in modo esplicito il livello di log. Nell'esempio seguente il livello di log predefinito del registro eventi viene impostato su LogLevel.Information:

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

gli overload di AddEventLog possono essere passati EventLogSettings. Se null o non specificato, vengono utilizzate le impostazioni predefinite seguenti:

  • LogName: "Applicazione"
  • SourceName: ".NET Runtime"
  • MachineName: viene usato il nome del computer locale.

Il codice seguente modifica il SourceName dal valore predefinito di ".NET Runtime" a CustomLogs:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Logging.AddEventLog(
    config => config.SourceName = "CustomLogs");

using IHost host = builder.Build();

host.Run();

Servizio app di Azure

Il pacchetto del provider Microsoft.Extensions.Logging.AzureAppServices scrive i log nei file di testo in un file system dell'app del servizio app di Azure e per archiviazione BLOB in un account di archiviazione di Azure.

Il pacchetto del provider non è incluso nelle librerie di runtime. Per usare il provider, aggiungere il pacchetto del provider al progetto.

Per configurare le impostazioni del provider, usare AzureFileLoggerOptions e AzureBlobLoggerOptions, come illustrato nell'esempio seguente:

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();

Quando viene distribuita su Azure App Service, l'app usa le impostazioni nella sezione log di Azure App Service della pagina App Service del portale di Azure. Quando vengono aggiornate le impostazioni seguenti, le modifiche diventano effettive immediatamente senza richiedere un riavvio o una ridistribuzione dell'app.

Il percorso predefinito per i file di log si trova nella cartella D:\home\LogFiles\Application. Le impostazioni predefinite aggiuntive variano in base al provider:

  • Registrazione Applicazioni (file system): il nome file system predefinito è diagnostics-yyyymmdd.txt. Il limite predefinito per le dimensioni del file è 10 MB e il numero massimo predefinito di file conservati è 2.
  • Registrazione Applicazioni (Blob): Il nome predefinito del Blob è {app-name}/yyyy/mm/dd/hh/{guid}_applicationLog.txt.

Questo provider registra solo quando il progetto viene eseguito nell'ambiente Azure.

Streaming dei log di Azure

Lo streaming dei log di Azure supporta la visualizzazione dell'attività del log in tempo reale da:

  • Server delle applicazioni
  • Il Web Server
  • Traccia delle richieste non riuscite

Per configurare lo streaming dei log di Azure:

  • Passare alla pagina log del servizio app dalla pagina del portale dell'app.
  • Impostare registrazione applicazioni (file system) su On.
  • Scegliere il log livello. Questa impostazione si applica solo al flusso di log di Azure.

Passare alla pagina log stream per visualizzare i log. I messaggi registrati vengono registrati con l'interfaccia ILogger.

Azure Application Insights

Il pacchetto del provider di Microsoft.Extensions.Logging.ApplicationInsights scrive i log in Azure Application Insights. Application Insights è un servizio che monitora un'app Web e fornisce strumenti per l'esecuzione di query e l'analisi dei dati di telemetria. Se si usa questo provider, è possibile eseguire query e analizzare i log usando gli strumenti di Application Insights.

Per altre informazioni, vedere le risorse seguenti:

Considerazioni sulla progettazione di un provider di logging

Se si prevede di sviluppare una propria implementazione dell'interfaccia ILoggerProvider e dell'implementazione personalizzata corrispondente di ILogger, considerare i punti seguenti:

  • Il metodo ILogger.Log è sincrono.
  • La durata dello stato del log e degli oggetti deve non essere considerata.

Un'implementazione di ILoggerProvider creerà un ILogger tramite il relativo metodo di ILoggerProvider.CreateLogger. Se l'implementazione cerca di accodare i messaggi di registrazione in modo non bloccante, i messaggi devono prima essere materializzati o lo stato dell'oggetto usato per materializzare una voce di log deve essere serializzato. In questo modo si evitano potenziali eccezioni da oggetti deallocati.

Per altre informazioni, vedere Implementare un provider di registrazione personalizzato in .NET.

Provider di registrazione di terze parti

Ecco alcuni framework di registrazione di terze parti che funzionano con vari carichi di lavoro .NET:

Alcuni framework di terze parti possono eseguire registrazione semantica, nota anche come registrazione strutturata.

L'uso di un framework di terze parti è simile all'uso di uno dei provider predefiniti:

  1. Aggiungere un pacchetto NuGet al progetto.
  2. Chiamare un metodo di estensione ILoggerFactory o ILoggingBuilder fornito dal framework di log.

Per altre informazioni, vedere la documentazione di ogni provider. I provider di registrazione di terze parti non sono supportati da Microsoft.

Vedere anche