Como configurar o fornecedor de registos de aplicações Azure para um ASP.NET app principal?

Estou a tentar configurar o registo personalizado na minha ASP.NET Core MVC app. O aplicativo é hospedado no Azure App Service no Linux (free tier). Os arquivos de log não estão aparecendo, o que estou fazendo de errado?

a minha configuração:

a seguir ASP.NET documentação do registo principal(https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1#azure-app-service-provider), eu adicionei um fornecedor Azure App Serviço de registro para o meu app:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.AddAzureWebAppDiagnostics();
                })
                .ConfigureServices(serviceCollection => serviceCollection
                    .Configure<AzureFileLoggerOptions>(options =>
                    {
                        options.FileName = "azure-diagnostics-";
                        options.FileSizeLimit = 10 * 1024;
                        options.RetainedFileCountLimit = 5;
                    })
                )
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseUrls("http://*:8080");
                    webBuilder.UseStartup<Startup>();
                });

a configuração de registo na aplicação.configuração:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}
Estou a registar uma informação, um aviso e um erro no meu controlador.

de acordo com a documentação Azure (https://docs.microsoft.com/en-us/azure/app-service/troubleshoot-diagnostic-logs#enable-application-logging-linuxcontainer), activei o registo para o sistema de ficheiros na aplicação Azure - > registos do serviço de aplicações:

Azure config

A minha aplicação é bem utilizada e funciona. Estou à espera de encontrar um registar o ficheiro com os nomes 'azure-diagnostics' algures no sistema de ficheiros da aplicação. Eu verifiquei o sistema de arquivos indo para Azure App - > SSH e executando:

find . -name '*azure-diagnostics*'
O que não devolve nada. Eu também verifiquei o sistema de arquivos usando Kudu E VS Cloud Explorer, os arquivos não estão lá. Se eu adicionar o fornecedor de registro da consola, os registros aparecem nos arquivos de registro Azure padrão muito bem. O que me está a escapar?

Author: Michal Ciesielski, 2020-01-04

3 answers

Não consegui fazê-lo funcionar usando o fornecedor de Registo AzureWebAppDiagnostics, mas consegui resolver o meu problema usando o fornecedor de serilog com um lavatório de ficheiros.

No programa.cs:

public static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                .WriteTo.File(@"../../LogFiles/azure-diagnostics-", fileSizeLimitBytes: 50 * 1024, rollingInterval: RollingInterval.Day, retainedFileCountLimit: 5)
                .CreateLogger();

            try
            {
                CreateHostBuilder(args).Build().Run();
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseSerilog()
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseUrls("http://*:8080");
                    webBuilder.UseStartup<Startup>();
                });
    }

A chamada UseSeriLog () substitui a fábrica de registos do MS por omissão, para que eu pudesse também apagar a configuração de registo dos 'applsettings'.

Agora posso ver os meus ficheiros de Registo personalizados a aparecer na pasta /home / LogFiles como esperado.

 1
Author: Michal Ciesielski, 2020-01-12 17:55:52

Acho que você precisa configurar o blob para armazenar os logs Também, você pode tentar configurar o arquivo

.ConfigureServices(serviceCollection => serviceCollection
                .Configure<AzureFileLoggerOptions>(options =>
                {
                    options.FileName = "azure-diagnostics-";
                    options.FileSizeLimit = 50 * 1024;
                    options.RetainedFileCountLimit = 5;
                }).Configure<AzureBlobLoggerOptions>(options =>
                {
                    options.BlobName = "log.txt";
                }))

Verificar aplicação de amostras

 0
Author: Sajeetharan, 2020-01-04 16:20:21

A localização por omissão dos ficheiros de registo está na pasta D:\home\LogFiles\Application, e o nome por omissão do ficheiro é diagnostics-yyyymmdd.txt.

Adicione o seguinte fornecedor no programa.cs.

.ConfigureLogging(logging =>
{
    logging.AddAzureWebAppDiagnostics();
    logging.AddConsole();
})

Ligue para logger.LogWarning ("message"); no seu código para escrever no ficheiro de Registo. Se utilizar LogWarning certifique-se que define o nível como um aviso ou mais detalhado.

Por favor consulte este número .

 0
Author: Joey Cai, 2020-01-06 09:27:36