web-dev-qa-db-fra.com

Comment afficher la console ou la sortie de la sortie dans un service d'application Azure? Console.writeline ou trace.traceError

Je pensais que ce serait simple mais après plusieurs heures se sont rendus compte que ce n'est pas le cas. J'ai déployé un "service d'application" à Azure qui est un noyau C # .NET.

J'essaie d'ajouter une surveillance brute de l'application à l'aide de la console.writeline ("mon message") ou de Trace.traceError ("mon message") mais je ne trouve que la sortie nulle part en azur.

J'ai essayé de permettre aux aperçus de l'application mais je n'ai pas non plus trouvé la sortie.

Je veux juste que le moyen le plus simple d'avoir une petite idée qu'une ligne de code dans mon application soit frappée. Quel est le moyen le plus simple?

Ce que j'ai essayé: 1) Je suis entré à la console à Azure et parcouru à chaque dossier qui pourrait avoir ce type de production mais n'a trouvé aucun. Certainement rien dans aucun des fichiers et des dossiers sous Logfiles. 2) I DID Accéder aux journaux de service de l'application "et activé" Logging d'applications (Système de fichiers) ". 3) J'ai également activé" Messages d'erreur détaillés "dans" Logs de service App ". 4) J'ai essayé "Paramètres de diagnostic (aperçu)" mais n'a pas pu trouver la sortie là-bas. 5) Je regarde le "ruisseau de journal" pour les journaux d'application, mais rien ne s'affiche là-bas 6) Sous "Logs", je n'ai que ce message: "Nous n'avons trouvé aucun journal" 7) ni "métriques" ni "alertes" n'a pas sortie du journal

Je commence à soupçonner que ce n'est pas un soutien à Azure. Dois-je ajouter un cadre d'exploitation forestière comme Serilog à une seule fois, ajoutez une déclaration comme "Vous avez frappé la ligne 20"? Je veux vraiment juste quelque chose de rapide et de sale, mais après avoir passé quelques heures à ce sujet, la partie "rapide" ne se produit pas.

4
Rob Kraft

Je me suis finalement compris moi-même. Je devais ajouter de la configuration d'AzureFileloggerOptions. Sans ces options, rien ne s'est présenté dans la sortie Azure.

.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";
    })
)

En résumé, pour .NET CORE 3.1, pour que vos messages apparaissent dans le "jeu de journaux", vous devez activer la section "Application Logging" dans la section "Logs de service de l'application" d'Azure. Dans votre code, vous devez faire référence:

en utilisant microsoft.extensions.dependencendencendencendencendencendency;

en utilisant microsoft.extensions.logging.AzureAppservices;

En outre, dans mon cas, j'utilise Blazor/Signalr et ne possédez pas de contrôleur MVC, je ne pouvais donc pas comprendre comment accéder au cadre d'exploitation forestière dans ma classe. Je suis sûr qu'il y a une meilleure façon, mais en exposant l'iLogger comme dans le code ci-dessous, j'ai pu la référencer de n'importe où dans ma base de code.

J'ai une méthode statique que j'appelle pour écrire sur le journal (console lorsque je débobile activement sur mon PC, ou Azure "Stream Stream" lors de l'exécution d'Azure:

public static void WriteToLog(string message)
{
    Program.Logger.LogError(message);
}

Code dans mon programme.cs ressemble à ceci:

public class Program
    {
        public static ILogger Logger;
        public static void Main(string[] args)
        {
            //CreateHostBuilder(args).Build().Run();

            var Host = CreateHostBuilder(args).Build();

            var LoggerF = LoggerFactory.Create(builder =>
            {
                builder.AddFilter("BlazorDiceRoller", LogLevel.Warning)
                .AddConsole().AddAzureWebAppDiagnostics()
                .AddFilter("Microsoft", LogLevel.Warning)
                .AddFilter("System", LogLevel.Warning);
            });
            Logger = LoggerF.CreateLogger<Program>();
            Host.Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.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";
                })
            )
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
    }
0
Rob Kraft

Oui, cette (console ou sortie de trace) n'est pas prise en charge dans le noyau .NET uniquement. Vous devriez utiliser ILogger selon les étapes ci-dessous.

Dans Startup.cs -> Configure méthode, réécrire la méthode de configuration comme ci-dessous:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
       //your other code

        //add the following 2 lines of code.
        loggerFactory.AddConsole();
        loggerFactory.AddDebug();


        app.UseStaticFiles();

        //your other code
    }

Puis dans HomeController.cs (par exemple), ajoutez le code suivant:

 public class HomeController : Controller
 {
    private readonly ILogger _logger; 

    public HomeController(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<HomeController>();
    }

    public IActionResult Index()
    {
        _logger.LogInformation("this is a information from ILogger...");

        return View();
    }

    //other code

  }

S'il vous plaît laissez-moi savoir si vous avez encore plus de problèmes.

0
Ivan Yang