Compartilhar via


Provedores de log no .NET

Os provedores de registro em log persistem logs, exceto o provedor 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 padrão do .NET Worker:

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 do .NET Worker. As próximas seções fornecem exemplos com base nos modelos de aplicativo do .NET Worker, que usam o Host Genérico.

Para substituir o conjunto padrão de provedores de log adicionados 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 provedores adicionais, consulte:

Configurar um serviço que depende do ILogger

Para configurar um serviço que depende de ILogger<T>, use a injeção de construtor ou forneça um método de fábrica. A abordagem do método de fábrica é recomendada somente se não houver outra opção. Por exemplo, considere um serviço que precisa de uma instância de 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 de DI precisa construir uma instância de IExampleService. Você pode acessar qualquer um dos serviços registrados dessa forma.

Provedores de log internos

As Extensões da Microsoft incluem os seguintes provedores de log como parte das bibliotecas de runtime:

Os provedores de registro em log a seguir são fornecidos pela Microsoft, mas não como parte das bibliotecas de runtime. Eles devem ser instalados como pacotes NuGet adicionais.

Console

O provedor Console registra a saída no console.

Depurar

O provedor 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á anexado. O DebugLoggerProvider cria instâncias de uma classe de registrador que implementa a interface ILogger.

Origem do evento

O provedor EventSource grava em uma origem do evento multiplataforma com o nome Microsoft-Extensions-Logging. No Windows, o provedor usa ETW.

Ferramentas de rastreamento dotnet

A ferramenta dotnet-trace é uma ferramenta global de CLI multiplataforma que permite a coleta de rastreamentos do .NET Core de um processo em execução. A ferramenta coleta dados do provedor 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 dotnet-trace, consulte Depurar o alto uso da CPU no .NET Core.

Log de Eventos do Windows

O provedor EventLog envia a saída de log para o Log de Eventos do Windows. Diferente dos outros provedores, o provedor EventLognão herda as configurações de não provedor padrão. Se as configurações de log EventLog não forem especificadas, elas terão como 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 de AddEventLog podem passar em EventLogSettings. Se null ou não especificado, as seguintes configurações padrão serão usadas:

  • LogName: "Aplicativo"
  • SourceName: ".NET Runtime"
  • MachineName: o nome do computador 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 de 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 blobs em uma conta de Armazenamento do Azure.

O pacote do provedor não está incluído nas bibliotecas de runtime. 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 entrarão em vigor imediatamente sem a necessidade de 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:

  • Registro em log de aplicativos (sistema de arquivos): o nome do 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.
  • Registro em log do aplicativo (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

O streaming de log do Azure dá suporte à exibição de atividades de log em tempo usando:

  • O servidor de aplicativos
  • O servidor Web
  • De uma solicitação de rastreio com falha

Para configurar o streaming de log do Azure:

  • Navegue até a página Logs do Serviço de Aplicativo no portal do aplicativo.
  • Defina Habilitar o log de aplicativo (sistema de arquivos) como Ativada.
  • Escolha o Nível de log. Essa configuração só se aplica ao streaming de log do Azure.

Navegue até a página do Log Stream para exibir logs. As mensagens são registradas com a interface ILogger.

Azure Application Insights

O pacote de provedor Microsoft.Extensions.Logging.ApplicationInsights grava os 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:

Considerações de design do provedor de registro em log

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

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

Uma implementação de ILoggerProvider criará um ILogger por meio de seu método ILoggerProvider.CreateLogger. Se sua implementação visa enfileirar mensagens de log de forma não bloqueante, as mensagens devem primeiro ser convertidas em forma material 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 log de terceiros

Aqui estão algumas estruturas de log de terceiros que funcionam com várias cargas de trabalho do .NET:

Algumas estruturas de terceiros podem fazer o log semântico, também conhecido como registro em 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 método de extensão ILoggerFactory ou ILoggingBuilder fornecido pela estrutura de registros.

Para obter mais informações, consulte a documentação de cada provedor. Provedores de log de terceiros não são compatíveis com a Microsoft.

Consulte também