Cet article, écrit par le même auteur, est disponible en langue anglaise ici

Introduction

Azure Web App Diagnostics est un framework de Microsoft qui permet d’ajouter la possibilité d’afficher des logs dans Azure. Ces logs sont typiquement persistés dans le sytème de fichiers de l’Azure App Service. 

Avoir des logs peut aider lorsqu’on débogue une Web App ou une API.  

Avant ASP.NET Core 2.1, le simple fait de loguer dans Azure était … simple ! Les logs écrits par un Microsoft.Extensions.Logging.ILogger étaient écrits par défaut dans un fichier qui était accessible dans Azure. 

Mais avec l’arrivée de .NET 5 (et peut-être de .NET Core 3.1), la configuration de ces mêmes logs est devenue beaucoup plus explicite. Sans cela, impossible de loguer ! 

Le but de cet article est de vous guider dans la configuration de ces logs avec .NET 5, et ensuite de vous montrer où les trouver. 

Étape 1 – Activer les logs

Afin d’activer les logs, il vous suffit d’aller sur le portail Azure. Faites défiler le menu de gauche jusqu’à ce que vous voyiez App Service Logs

L’interrupteur le plus important à allumer est Application Logging (Filesystem).

Je vous conseille également de mettre le niveau Verbose (commentaires) pour être certain de ne rater aucun log.

Cette capture d’écran peut vous aider: 

Étape 2 : Écrire le code de configuration

Vous l’attendiez ? Le code C# ! 

À partir de .NET 5, le code de configuration des logs se trouve à l’intérieur de la classe Program. Il intervient lorsque l’on configure le WebHost. 

Avant toute chose, installez le package nuget  de Microsoft.Extensions.Logging.AzureAppServices. 

Ensuite, ajoutez le code suivant: 

using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.AzureAppServices;
using Microsoft.Extensions.DependencyInjection;
public class Program
{
            public static void Main(string[] args) => CreateWebHostBuilder(args).Build().Run();
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .ConfigureLogging(logging =>
                {
                        logging.ClearProviders();
                    // Nous avons besoin d’être précis sur le niveau des traces.
                    logging.AddConsole();
                    logging.AddDebug();
                    logging.AddAzureWebAppDiagnostics();
                })
                .ConfigureServices(services =>
                {
                        services.Configure<AzureFileLoggerOptions>(options =>
                    {
                            options.FileName = « my-azure-diagnostics-« ;
                        options.FileSizeLimit = 50 * 1024;
                        options.RetainedFileCountLimit = 5;
                    });
                })
                .UseStartup<Startup>();
}

Étape 3 : Laisser une trace

Strickland : “Aucun McFly n’a jamais laissé la moindre trace dans toute l’histoire de Hill Valley. “

Marty : “Vous savez, l’histoire elle va changer. “

— Marty McFly,
Retour vers le Futur (1985)

Voyageur de l’espace.

Depuis un contrôleur, où n’importe quelle autre classe ayant accès à l’injection de dépendances, récupérez le ILogger et commencez à loguer. 

private ILogger Logger { get; } 
public AwesomeController(ILoggerFactory loggerFactory
{  
    this.Logger = loggerFactory.CreateLogger(« AwesomeLogger« ); 

[HttpGet
public void Get() 

    this.Logger.Debug(« DEBUG message. GET enpoint was called. »); 
    this.Logger.Error(« Error messageSomething went wrong ! »);
}

Étape 4 : Un endroit où trouver les logs

Sur le portail Azure, il y a une section qui contient un flux de logs en temps réel. 

Il vous suffit d’appuyer sur la section Log Stream du menu de gauche pour voir vos logs s’y inscrire. 

Vous les voyez ? Moi oui ! 

Conclusion

Nom de Zeus ! Nous avons réussi à ajouter des logs dans notre Azure App Service

Pour en savoir plus sur le logging avec .NET 5vous pouvez cliquer ici

Par exemple, vous pourrez y apprendre comment configurer vos logs avec des paramètres qui s’écrivent dans le fichier appsettings.json.