Глобальный обработчик исключений для функций Azure - PullRequest
1 голос
/ 09 мая 2019

Возможно ли иметь глобальный обработчик исключений для проекта Azure Functions .Net C #?

Мы хотели бы иметь централизованное место для регистрации исключений в Rollbar.

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Я также жду тестовую функцию, но сейчас я написал свой аспект (AOP) для регистрации / обработки исключений. У меня много функций, но я не написал ни одного try-catch для обработки исключений.

Я использую MrAdvice для AOP

Аспект

public class LoggerAspectAttribute : Attribute, IMethodAsyncAdvice
{
    public async Task Advise(MethodAsyncAdviceContext context)
    {
        ILog log = LogManager.GetLogger();
        RequestTelemetry requestTelemetry = new RequestTelemetry { Name = context.TargetType.Name };
        IOperationHolder<RequestTelemetry> operation = log.TelemetryClient.StartOperation(requestTelemetry);
        operation.Telemetry.Success = true;
        log.Info($"{context.TargetType.Name} trigger");

        try
        {
            await context.ProceedAsync(); // this calls the original method
        }
        catch (Exception ex)
        {
            operation.Telemetry.Success = false;
            log.Error(ex.Message, ex);
            throw;
        }
        finally
        {
            log.Info($"{context.TargetType.Name} completed.");
            log.TelemetryClient.StopOperation(operation);
        }
    }
}

Функция

public static class AlertFunction
{
    [LoggerAspect]
    [FunctionName("AlertFunction")]
    public static async Task Run([EventHubTrigger("%AlertEventHub%", Connection = "AlertEventHubConnection", ConsumerGroup = "%AlertEventHubConsumerGroup%")]EventData eventMessage,
        [Inject]IEventService eventService, [Inject]ILog log)
    {
        log.Verbose($"Event PartitionKey {eventMessage.PartitionKey}, Offset {eventMessage.Offset} and SequenceNumber {eventMessage.SequenceNumber}");
        string message = Encoding.UTF8.GetString(eventMessage.GetBytes());
        log.Verbose(message);
        await eventService.FilterAlertEventAsync(message);
    }
}

надеюсь, что это даст некоторую идею!

1 голос
/ 09 мая 2019

Пока эта функция недоступна, вы можете перейти на страницу обратной связи , чтобы сообщить о вашем запросе.

Однако вы все равно можете использовать функцию Azure с Application Insights, оПодробности, которые вы можете обратиться к этому документу: Функции монитора Azure .

...