6
votes

Comment configurer la journalisation Azure après la mise à niveau vers ASP.NET Core 2.2

La mise à niveau d'ASP.NET Core 2.1 vers ASP.NET Core 2.2 et suivant le guide de documentation officiel .

Vous avez un problème avec l'écriture de la nouvelle configuration de journalisation dans Startup.cs . Plus précisément, des problèmes sur la façon de gérer les AzureWebAppDiagnostics.

L'ancienne configuration consistait en la configuration suivante:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddLogging(builder => builder
        .AddConsole()
        .AddAzureWebAppDiagnostics());
    ...
}

Les deux AddAzureWebAppDiagnostics et AzureAppServicesDiganosticsSettings est marqué comme obsolète. Ce dernier suggère d'utiliser à la place AzureBlobLoggerOptions . Le guide indique que la configuration de journalisation doit être déplacée vers quelque chose comme ceci:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...
    loggerFactory.AddApplicationInsights(app.ApplicationServices);
    loggerFactory.AddAzureWebAppDiagnostics(
        new AzureAppServicesDiagnosticsSettings
        {
            OutputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss zzz} [{Level}] {RequestId}-{SourceContext}: {Message}{NewLine}{Exception}"
        }
    );
}

Cependant, je n'ai aucune idée sur la façon d'ajouter correctement la configuration à ILoggingBuildler ET comme un bonus supplémentaire , AzureBlobLoggerOptions n'autorise pas un OutputTemplate personnalisé. AddApplicationInsights est également absent de ILoggingBuilder.

Des suggestions sur la façon de faire fonctionner cela comme avant?


0 commentaires

3 Réponses :


2
votes

Insights est un peu lent pour la fête. Il existe un nouveau package avec le support du constructeur de journalisation, par exemple

<PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" Version="2.9.0-beta3" />

Sans cela, vous devrez utiliser la méthode Obsolète.


0 commentaires

0
votes

Le OutputTemplate personnalisé nécessitait une dépendance sur Serilog, qui a été supprimé pour la version 2.2, donc il n'est pas dans les classes d'options de fichier ou d'objet blob.

Pour la version 2.2, il est recommandé de configurer la journalisation dans Program.cs plutôt que Startup.cs; voici un exemple utilisant AddAzureWebAppDiagnostics et les classes d'options:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging.AzureAppServices;
using Microsoft.Extensions.Logging;

Cela nécessite le package NuGet Microsoft.Extensions.Logging.AzureAppServices et les instructions using suivantes:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureLogging(logging => logging.AddAzureWebAppDiagnostics())
        .ConfigureServices(serviceCollection => serviceCollection
                .Configure<AzureFileLoggerOptions>(options => {
                    options.FileName = "azure-diagnostics-";
                    options.FileSizeLimit = 50 * 1024;
                    options.RetainedFileCountLimit = 5;
                }).Configure<AzureBlobLoggerOptions>(options => {
                    options.BlobName = "log.txt";
                }))
        .UseStartup<Startup>();


2 commentaires

Quand j'essaye cela, j'obtiens que 'IServiceCollection' ne contient pas de définition pour 'Configure' et aucune méthode d'extension accessible 'Configure' acceptant un premier argument de type 'IServiceCollection' pourrait être trouvée (vous manquez une directive using ou une référence d'assemblage ?)


J'ai ajouté le package et les instructions using à la réponse.



2
votes

Dans la version 2.2, cela fonctionne en divisant la configuration entre Program.cs et Startup.cs:

Ajoutez ceci à CreateWebHostBuilder dans Program.cs:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Logging.AzureAppServices;

Ajouter ceci pour ConfigureServices dans Startup.cs:

services.Configure<AzureFileLoggerOptions>(options =>
{
options.FileName = "azure-diagnostics-";
options.FileSizeLimit = 50 * 1024;
options.RetainedFileCountLimit = 5;
});

Cela me suffisait pour commencer à voir les messages dans le journal Azure App Service; vous avez besoin du package Nuget Microsoft.Extensions.Logging.AzureAppService et des instructions d'utilisation correspondantes également:

  .ConfigureLogging((hostingContext, logging) =>
    {
        logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
        logging.AddConsole();
        logging.AddDebug();
        logging.AddEventSourceLogger();
        logging.AddAzureWebAppDiagnostics();
    })


0 commentaires