Регистрировать ошибки в треках приложений вместо представлений приложений?

#azure-functions #azure-application-insights #microsoft-extensions-logging

Вопрос:

У меня есть приложение-функция azure, которое использует ведение журнала расширения Microsoft для ознакомления с приложениями.

У меня есть этот код:

 public static void Run(IService service, ILogger log, bool throwException, bool addHeartBeat = false)
{
    try
    {
        if (addHeartBeat)
        {
            var props = new Dictionary<string, object> { {"IsHeartBeat",true } };
            log.LogMetric($"Heartbeat: {service.GetType().ToString()}", 0, props);
        }

        log.LogInformation($"{{logTypeStart}}: {service.GetType()}", logTypeStart);
        service.Run(log);
        log.LogInformation($"{{logTypeEnd}}: {service.GetType()}", logTypeEnd);
    }
    catch (Exception ex)
    {
        log.LogCritical(ex, ex.Message);

        if (throwException)
        {
            throw ex;
        }
    }
}
 

Я бы ожидал, что LogCritical войдет в исключения, но он добавляется в приложения. Можно ли это изменить, чтобы вместо этого регистрироваться в исключениях?

Комментарии:

1. Есть какие-либо изменения в этой проблеме?

Ответ №1:

Чтобы зарегистрировать ошибку как исключение в app insights, эту строку кода _logger.LogError("Test", new Exception("Test")); следует изменить на _logger.LogError(new Exception(), "test"); , что означает new Exception() , что первым параметром должен быть параметр.

И вы можете добавить пакет SDK Application Insights, щелкнув правой кнопкой мыши свой проект -> добавить ->> Телеметрия Application Insights, что очень полезно для автоматического выполнения некоторых действий(т. Е. Добавления .UseApplicationInsights() in Programs.cs

введите описание изображения здесь

Мои упреки:

1. Добавление пакета SDK application insights, как упоминалось выше

2. Добавьте loggerFactory.AddApplicationInsights(app.ApplicationServices,LogLevel.Information); в Startup.cs -> метод Configure (), код, как показано ниже:

 public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Error");
                    app.UseHsts();
                }

                app.UseHttpsRedirection();
                app.UseStaticFiles();
                app.UseCookiePolicy();

                app.UseMvc();

                //Add this line of code
                loggerFactory.AddApplicationInsights(app.ApplicationServices,LogLevel.Information);
            }
 

3. После этого вам нужно зарегистрировать ошибку в новом классе или в любом указанном коде:

 public class AboutModel : PageModel
        {
            private ILogger _logger;

            public AboutModel(ILogger<AboutModel> logger)
            {
                _logger = logger;
            }

            public string Message { get; set; }

            public void OnGet()
            {
                _logger.LogInformation("it is just a test herexxxx");

               //Only this format can log as exception
                _logger.LogError(new Exception(), "it is a new Exceptionxxxx");

               //it will log as trace
                _logger.LogError("error logs xxx");
                Message = "Your application description page.";
            }
        }
 

4. Результат теста:

введите описание изображения здесь

Комментарии:

1. @Thomas Segato — Если ответ был полезен, не могли бы вы, пожалуйста, принять его как ответ , чтобы другие, столкнувшиеся с той же проблемой, могли найти это решение и решить свою проблему.