Partilhar via


Registrando provedores no .NET

Os fornecedores de registo de logs persistem logs, exceto o fornecedor Console, que apenas exibe 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:

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 classe Program 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 adicionado por Host.CreateApplicationBuilder, chame ClearProviders e adicione os provedores de log desejados. Por exemplo, o seguinte código:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

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

Para fornecedores adicionais, consulte:

Configurar um serviço que depende do ILogger

Para configurar um serviço que depende 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 instância ILogger<T> 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 disponibilizados pela Microsoft, mas não fazem parte das bibliotecas de tempo de execução. Eles devem ser instalados como pacotes NuGet adicionais.

Consola

O provedor de Console registra a saída no console.

Depurar

O provedor de Debug grava a saída de log usando a classe System.Diagnostics.Debug, especificamente por meio do método Debug.WriteLine e somente quando o depurador está ligado. O DebugLoggerProvider cria instâncias de uma classe logger que implementa a interface ILogger.

Origem do evento

O provedor de EventSource grava numa fonte de eventos multiplataforma com o nome Microsoft-Extensions-Logging. No Windows, o fornecedor usa ETW.

Ferramentas de rastreamento dotnet

A ferramenta dotnet-trace é uma ferramenta CLI multiplataforma global que permite a recolha de traces do .NET Core num processo em execução. A ferramenta coleta dados do provedor de Microsoft.Extensions.Logging.EventSource usando um LoggingEventSource.

Consulte dotnet-trace para obter instruções de instalação. Para obter um tutorial de diagnóstico usando o dotnet-trace, consulte Depurar alto uso da CPU no .NET Core.

Registo de Eventos do Windows

O provedor de EventLog envia a saída de log para o Log de Eventos do Windows. Ao contrário dos outros provedores, o provedor de EventLognão herda as configurações padrão de não-provedor. Se as configurações de log EventLog não forem especificadas, assumirão o padrão LogLevel.Warning.

Para registrar eventos inferiores a LogLevel.Warning, 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"
    }
  }
}

sobrecargas AddEventLog podem passar para EventLogSettings. Se null ou não especificado, as seguintes configurações padrão são usadas:

  • LogName: "Aplicação"
  • SourceName: ".NET Runtime"
  • 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 Aplicativo do Azure

O pacote do provedor de 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 em de 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 Aplicações do Azure, a aplicação usa as configurações na seção registos do Serviço de Aplicações da página Serviço de Aplicações 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 é na pasta D:\home\LogFiles\Application. Os padrões adicionais variam de acordo com o provedor:

  • Application Logging (Filesystem): O nome de ficheiro 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.
  • Application Logging (Blob): O nome de blob padrão é {app-name}/yyyy/mm/dd/hh/{guid}_applicationLog.txt.

Esse provedor só registra quando o projeto é executado no ambiente do Azure.

Streaming de log do Azure

A transmissão de logs do Azure suporta a visualização da atividade de logs em tempo real a partir de:

  • O servidor de aplicativos
  • O servidor web
  • Rastreamento de pedidos falhados

Para configurar o streaming de log do Azure:

  • No portal do aplicativo, navegue até a página de logs do Serviço de Aplicativo .
  • Defina o Registo de Aplicação (Sistema de Arquivos) para ligado.
  • Escolha o log Nível. Essa configuração só se aplica ao streaming de log do Azure.

Navegue até a página Log Stream para visualizar os logs. O registo das mensagens é feito através da interface ILogger.

Azure Application Insights

O pacote do provedor de Microsoft.Extensions.Logging.ApplicationInsights escreve os registos em 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:

Concepção do provedor de registo

Se você planeja desenvolver sua própria implementação da interface ILoggerProvider e a implementação personalizada correspondente do ILogger, considere os seguintes pontos:

  • O método ILogger.Log é síncrono.
  • O tempo de vida do estado de log e dos objetos não deve ser assumido.

Uma implementação de ILoggerProvider criará um ILogger através do seu método ILoggerProvider.CreateLogger. 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:

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:

  1. Adicione um pacote NuGet ao seu projeto.
  2. Chame um ILoggerFactory ou ILoggingBuilder método de 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.

Ver também