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:
- Utilizza l'host generico .
- Chiamare CreateApplicationBuilder, che aggiunge i seguenti provider di log:
- console
- Debug
- EventSource
- EventLog (solo Windows)
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:
- Chiama ClearProviders per rimuovere tutte le istanze di ILoggerProvider dal generatore.
- Aggiunge il provider di logging della console .
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.
- AzureAppServicesFile e AzureAppServicesBlob
- ApplicationInsights
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:
- panoramica di Application Insights
- ApplicationInsightsLoggerProvider per log di .NET Core ILogger: inizia da qui se vuoi implementare il provider di logging senza il resto dei dati di telemetria di Application Insights.
- gli adattatori di registrazione di Application Insights.
- Installa, configura e inizializza l'SDK di Application Insights - Esercitazione interattiva sul sito di Microsoft Learn.
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:
- elmah.io (repository GitHub)
- EFLogger (repository GitHub)
- Gelf (repository GitHub)
- JSNLog (repo GitHub)
- KissLog.net (repository GitHub)
- Log4Net (repo GitHub)
- NLog (repository GitHub)
- NReco.Logging (GitHub repository)
- Sentry (repository GitHub)
- Serilog (repository GitHub)
- Stackdriver (GitHub repo)
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:
- Aggiungere un pacchetto NuGet al progetto.
- Chiamare un metodo di estensione
ILoggerFactory
oILoggingBuilder
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.