Как просмотреть вывод консоли или трассировки в службе приложений azure? Console.WriteLine или Trace.TraceError - PullRequest
1 голос
/ 15 марта 2020

Я думал, что это будет просто, но через несколько часов понял, что это не так. Я развернул «Службу приложений» на Azure, то есть C#. Net Core.

Я пытаюсь добавить грубый мониторинг приложений с помощью Console.WriteLine («мое сообщение»). ) или Trace.TraceError («мое сообщение»), но я не могу найти этот вывод нигде в Azure.

Я пытался включить Application Insights, но также не нашел вывода там.

Я просто хочу, чтобы самый простой способ получить представление о том, что строка кода в моем приложении попала в цель. Что это за самый простой способ?

То, что я пробовал: 1) Я вошел в консоль в Azure и просмотрел все файлы, которые могли бы иметь такой вывод, но не нашли ни одного. Конечно, ничего в любом из файлов и папок в LogFiles. 2) Я сделал go для «Журналы службы приложений» и включил «Журналирование приложений (файловая система)». 3) Я также включил «Подробные сообщения об ошибках» в «Журналах службы приложений». 4) Я попытался «Настройки Diagnosti c (предварительный просмотр)», но не смог найти вывод там. 5) Я наблюдаю «Поток журналов» для журналов приложений, но там ничего не отображается 6) В разделе «Журналы» у меня просто появляется это сообщение: «Мы не нашли журналов» 7) Ни у «показателей», ни «Оповещений» этого нет вывод журнала

Я начинаю подозревать, что это не поддерживается в Azure. Нужно ли добавлять фреймворк ведения журналов, например, serilog, только для того, чтобы один раз добавить заявление в приложение типа «Вы попали в строку 20»? Я просто хочу чего-то быстрого и грязного, но потратив на это несколько часов, «быстрой» части этого не происходит.

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Я наконец понял это сам. Мне нужно было добавить настройку AzureFileLoggerOptions. Без этих параметров ничего не отображается в выводе 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";
    })
)

В итоге, для. Net Core 3.1, чтобы ваши сообщения отображались в «потоке журналов», вам нужно включить «Ведение журнала приложений» в разделе «Журналы приложений» Azure. В вашем коде вам нужно сослаться на:

с использованием Microsoft.Extensions.DependencyInjection;

с использованием Microsoft.Extensions.Logging.AzureAppServices;

Также, в моем случае, я используя Blazor / SignalR и не имея контроллера MVC, поэтому я не мог понять, как получить доступ к инфраструктуре ведения журнала в моем классе. Я уверен, что есть лучший способ, но, выставив ILogger, как в приведенном ниже коде, я смог ссылаться на него из любого места в моей базе кода.

У меня есть метод stati c, который я вызываю для записи в журнал (консоль, когда я активно отлаживаю на моем p c, или Azure "Log Stream" при запуске в Azure:

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

Код в моем Program.cs выглядит следующим образом :

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 голосов
/ 16 марта 2020

Да, это (вывод консоли или трассировки) не поддерживается только в ядре. NET. Вы должны использовать ILogger, как описано ниже.

В Startup.cs -> Configure методе, переписать Configure метод, как показано ниже:

    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
    }

Затем в HomeController.cs (например), добавьте следующий код:

 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

  }

Пожалуйста, дайте мне знать, если у вас все еще есть проблемы.

...