Функция Azure HTTP Trigger: OutOfMemoryException не вошел в монитор - PullRequest
0 голосов
/ 15 февраля 2019

Я просто просматривал функции Azure и пытался проверить поведение функции Azure при возникновении исключения.Я просмотрел документацию Microsoft по обработке ошибок и сделал очень простой HTTP-триггер.Вот

КОД

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log, ExecutionContext context)
{
 log.LogInformation("C# HTTP trigger function processed a request.");

 string name = req.Query["name"];

try
{
    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;
    switch (name)
        {
            case "OutOfMemoryException":               
                throw new System.OutOfMemoryException();
            case "NullReferenceException":
                throw new System.NullReferenceException();
            case "IndexOutOfRangeException":
                throw new System.IndexOutOfRangeException();
            case "InvalidOperationException":
                throw new System.InvalidOperationException();
            case "ArgumentNullException":
                throw new System.ArgumentNullException();
            default:
                break;
        }
}
catch(System.Exception ex)
{
    throw;
}

return name != null
    ? (ActionResult)new OkObjectResult($"Hello, {name}")
    : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

ВЫПУСК

Я не вижу журналы, когда в памяти не хватаетисключениеЭто не здесь и не в понимании приложения, а вошло в консоль, но только во временную.Между первыми двумя журналами в списке я запустил исключение OutOfMemoryException, однако его нет.

Это известная проблема в Azure?

Monitor Scrrenshot

enter image description here

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

в соответствии с этим: https://docs.microsoft.com/en-us/sandbox/functions-recipes/durable-diagnostics

Вы должны отловить исключение и зарегистрировать его, используя регистратор, чтобы увидеть его в приложении insight:

 catch (FunctionFailedException ex)
    {
        log.Error("Some Exception occured ", ex);
    }
0 голосов
/ 15 февраля 2019

OutOfMemoryException является особым исключением по сравнению с другими в вашем списке.Хост функции будет отключен, как только будет сгенерировано это исключение, и журнал Application Insights, как вы обнаружили, не будет отправлять журнал.

IMO, OutOfMemoryException обычно генерируется и обрабатывается самим хостом функции, как это может быть у наснет способа справиться с проблемой памяти в нашем собственном коде.Если вы собираетесь установить собственное ограничение памяти, я предлагаю не создавать исключение для функции-хоста, мы могли бы зарегистрировать исключение самостоятельно.

catch(System.Exception ex)
{
    log.LogError(ex, ex.Message);
}

Мы также можем отслеживать все журналы в куду, перейти к https://<functionAppName>.scm.azurewebsites.net/DebugConsole и перейти к D:\home\LogFiles\Application\Functions\function\<FunctionName>, чтобы проверить журналы, относящиеся к функциям.

...