#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 — Если ответ был полезен, не могли бы вы, пожалуйста, принять его как ответ , чтобы другие, столкнувшиеся с той же проблемой, могли найти это решение и решить свою проблему.