Registrando provedores no .NET
Os provedores de registro em log persistem logs, exceto o Console
provedor, que exibe apenas logs como saída padrão. Por exemplo, o provedor do Azure Application Insights armazena logs no Azure Application Insights. Vários provedores podem ser habilitados.
Os modelos de aplicativo .NET Worker padrão:
- Use o host genérico.
- Chamada CreateApplicationBuilder, que adiciona os seguintes provedores de log:
- Consola
- Debug
- Fonte de eventos
- EventLog (somente Windows)
using Microsoft.Extensions.Hosting;
using IHost host = Host.CreateApplicationBuilder(args).Build();
// Application code should start here.
await host.RunAsync();
O código anterior mostra a Program
classe criada com os modelos de aplicativo .NET Worker. As próximas seções fornecem exemplos com base nos modelos de aplicativo .NET Worker, que usam o Host Genérico.
Para substituir o conjunto padrão de provedores de log adicionados pelo Host.CreateApplicationBuilder
, chame ClearProviders
e adicione os provedores de log desejados. Por exemplo, o seguinte código:
- Chamadas ClearProviders para remover todas as ILoggerProvider instâncias do construtor.
- Adiciona o provedor de log do console .
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
Para fornecedores adicionais, consulte:
- Provedores de log integrados.
- Provedores de registro de terceiros.
Configurar um serviço que depende do ILogger
Para configurar um serviço que depende de ILogger<T>
, use a injeção do construtor ou forneça um método de fábrica. A abordagem do método de fábrica é recomendada apenas se não houver outra opção. Por exemplo, considere um serviço que precisa de uma ILogger<T>
instância fornecida pela DI:
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Services.AddSingleton<IExampleService>(
container => new DefaultExampleService
{
Logger = container.GetRequiredService<ILogger<IExampleService>>()
});
O código anterior é um Func<IServiceProvider, IExampleService> que é executado na primeira vez que o contêiner DI precisa construir uma instância de IExampleService
. Pode aceder a qualquer um dos serviços registados desta forma.
Provedores de registro internos
As Extensões da Microsoft incluem os seguintes provedores de log como parte das bibliotecas de tempo de execução:
Os seguintes provedores de log são fornecidos pela Microsoft, mas não como parte das bibliotecas de tempo de execução. Eles devem ser instalados como pacotes NuGet adicionais.
Consola
O Console
provedor registra a saída no console.
Depurar
O Debug
provedor grava a saída de log usando a System.Diagnostics.Debug classe, especificamente através do Debug.WriteLine método e somente quando o depurador está anexado. O DebugLoggerProvider cria instâncias de uma classe logger que implementa a ILogger
interface.
Origem do Evento
O EventSource
provedor grava em uma fonte de evento entre plataformas com o nome Microsoft-Extensions-Logging
. No Windows, o provedor usa ETW.
Ferramentas de rastreamento dotnet
A ferramenta dotnet-trace é uma ferramenta global da CLI de plataforma cruzada que permite a coleta de rastreamentos do .NET Core de um processo em execução. A ferramenta coleta dados do Microsoft.Extensions.Logging.EventSource provedor usando um LoggingEventSourcearquivo .
Consulte dotnet-trace para obter instruções de instalação. Para obter um tutorial de diagnóstico usando dotnet-trace
o , consulte Depurar alto uso da CPU no .NET Core.
Registo de Eventos do Windows
O EventLog
provedor envia a saída do log para o Log de Eventos do Windows. Ao contrário dos outros provedores, o EventLog
provedor não herda as configurações padrão de não-provedor. Se EventLog
as configurações de log não forem especificadas, elas serão padronizadas para LogLevel.Warning
.
Para registrar eventos inferiores LogLevel.Warninga , defina explicitamente o nível de log. O exemplo a seguir define o nível de log padrão do Log de Eventos como LogLevel.Information:
"Logging": {
"EventLog": {
"LogLevel": {
"Default": "Information"
}
}
}
As sobrecargas AddEventLog podem passar .EventLogSettings Se null
especificado ou não, as seguintes configurações padrão são usadas:
LogName
: "Aplicação"SourceName
: "Tempo de execução do .NET"MachineName
: O nome da máquina local é usado.
O código a seguir altera o SourceName
do valor padrão de ".NET Runtime"
para CustomLogs
:
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Logging.AddEventLog(
config => config.SourceName = "CustomLogs");
using IHost host = builder.Build();
host.Run();
Serviço de Aplicações do Azure
O pacote do provedor Microsoft.Extensions.Logging.AzureAppServices grava logs em arquivos de texto no sistema de arquivos de um aplicativo do Serviço de Aplicativo do Azure e no armazenamento de blob em uma conta de Armazenamento do Azure.
O pacote do provedor não está incluído nas bibliotecas de tempo de execução. Para usar o provedor, adicione o pacote do provedor ao projeto.
Para definir as configurações do provedor, use AzureFileLoggerOptions e AzureBlobLoggerOptions, conforme mostrado no exemplo a seguir:
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 implantado no Serviço de Aplicativo do Azure, o aplicativo usa as configurações na seção Logs do Serviço de Aplicativo da página Serviço de Aplicativo do portal do Azure. Quando as configurações a seguir são atualizadas, as alterações entram em vigor imediatamente, sem exigir uma reinicialização ou reimplantação do aplicativo.
O local padrão para arquivos de log está na pasta D:\home\LogFiles\Application . Os padrões adicionais variam de acordo com o provedor:
- Log de aplicativos (sistema de arquivos): O nome de arquivo padrão do sistema de arquivos é diagnostics-yyyymmdd.txt. O limite de tamanho de arquivo padrão é de 10 MB e o número máximo padrão de arquivos retidos é 2.
- Log de aplicativos (Blob): O nome de blob padrão é {app-name}/aaaa/mm/dd/hh/{guid}_applicationLog.txt.
Esse provedor só registra quando o projeto é executado no ambiente do Azure.
Streaming de log do Azure
O streaming de logs do Azure dá suporte à exibição da atividade de log em tempo real de:
- O servidor de aplicativos
- O servidor web
- Falha no rastreio do pedido
Para configurar o streaming de log do Azure:
- Navegue até a página de logs do Serviço de Aplicativo na página do portal do aplicativo.
- Defina o log do aplicativo (sistema de arquivos) como Ativado.
- Escolha o nível de log. Essa configuração só se aplica ao streaming de log do Azure.
Navegue até a página Fluxo de logs para exibir logs. As mensagens registradas são registradas com a ILogger
interface.
Azure Application Insights
O pacote do provedor Microsoft.Extensions.Logging.ApplicationInsights grava logs no Azure Application Insights. O Application Insights é um serviço que monitora um aplicativo Web e fornece ferramentas para consultar e analisar os dados de telemetria. Se você usar esse provedor, poderá consultar e analisar seus logs usando as ferramentas do Application Insights.
Para obter mais informações, consulte os seguintes recursos:
- Visão geral do Application Insights
- ApplicationInsightsLoggerProvider for .NET Core ILogger logs - Comece aqui se quiser implementar o provedor de log sem o restante da telemetria do Application Insights.
- Adaptadores de log do Application Insights.
- Instale, configure e inicialize o SDK do Application Insights - Tutorial interativo no site do Microsoft Learn.
Considerações de design do provedor de registro em log
Se você planeja desenvolver sua própria implementação da interface e a ILoggerProvider implementação personalizada correspondente do ILogger, considere os seguintes pontos:
- O ILogger.Log método é síncrono.
- O tempo de vida do estado de log e dos objetos não deve ser assumido.
Uma implementação de irá criar um ILogger
através do ILoggerProvider
seu ILoggerProvider.CreateLogger método. Se sua implementação se esforça para enfileirar mensagens de log de maneira sem bloqueio, as mensagens devem primeiro ser materializadas ou o estado do objeto usado para materializar uma entrada de log deve ser serializado. Isso evita possíveis exceções de objetos descartados.
Para obter mais informações, consulte Implementar um provedor de log personalizado no .NET.
Provedores de registro de terceiros
Aqui estão algumas estruturas de log de terceiros que funcionam com várias cargas de trabalho .NET:
- elmah.io (repositório GitHub)
- Gelf (repositório GitHub)
- JSNLog (repositório GitHub)
- KissLog.net (repositório GitHub)
- Log4Net (repositório GitHub)
- NLog (repositório GitHub)
- NReco.Logging (repositório GitHub)
- Sentinela (repositório GitHub)
- Serilog (repositório GitHub)
- Stackdriver (repositório GitHub)
Algumas estruturas de terceiros podem executar log semântico, também conhecido como log estruturado.
O uso de uma estrutura de terceiros é semelhante ao uso de um dos provedores internos:
- Adicione um pacote NuGet ao seu projeto.
- Chame um
ILoggerFactory
método ouILoggingBuilder
extensão fornecido pela estrutura de log.
Para obter mais informações, consulte a documentação de cada provedor. Os fornecedores de registo de terceiros não são suportados pela Microsoft.