C# 如何在使用到服务总线的输出绑定的azure函数中记录错误?
我有一个azure函数,它使用输出绑定将消息发送到服务总线主题。如果消息未能添加到服务总线,但只有在内置重试失败后,我才需要记录自定义数据。问题是,我不确定在哪里写这样的日志语句?以下情况是否可以接受?我的猜测是,这将在重试策略失败之前记录错误,因此,如果出现暂时性错误,将为每次重试执行下面的日志记录语句C# 如何在使用到服务总线的输出绑定的azure函数中记录错误?,c#,.net,azure-functions,C#,.net,Azure Functions,我有一个azure函数,它使用输出绑定将消息发送到服务总线主题。如果消息未能添加到服务总线,但只有在内置重试失败后,我才需要记录自定义数据。问题是,我不确定在哪里写这样的日志语句?以下情况是否可以接受?我的猜测是,这将在重试策略失败之前记录错误,因此,如果出现暂时性错误,将为每次重试执行下面的日志记录语句 [FunctionName("MessageLoader")] [return: ServiceBus("%Topic_Name%", Connecti
[FunctionName("MessageLoader")]
[return: ServiceBus("%Topic_Name%", Connection = "Topic_Connection")]
public static async Task<TopicMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "domain/load-message")] HttpRequestMessage req)
{
try
{
var stringRequestBody = await req.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<TopicMessage>(stringRequestBody);
}
catch
{
_log.LogError("Could not send message: " + customBusinessObject.custom_message"); }
}
}
[FunctionName(“MessageLoader”)]
[返回:ServiceBus(“%Topic\u Name%”,Connection=“Topic\u Connection”)]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=“domain/load message”)]HttpRequestMessage请求)
{
尝试
{
var stringRequestBody=wait req.Content.ReadAsStringAsync();
返回JsonConvert.DeserializeObject(stringRequestBody);
}
抓住
{
_log.LogError(“无法发送消息:+customBusinessObject.custom_消息”);}
}
}
如果您想在向服务总线主题发送输出时检查功能,那么您这边的输出绑定使用方式是错误的
在您的方式中,如果发送消息出错,它将转到catch中的逻辑。但是请注意,您仍然需要返回一些内容。因此,这种方式是不正确的
您不应使用输出绑定作为返回类型,请执行以下操作:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace _20201012
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
[ServiceBus("bowman1012", Connection = "ServiceBusConnectionString1")] IAsyncCollector<dynamic> outputServiceBus,
ILogger log)
{
try
{
await outputServiceBus.AddAsync("Item1");
} catch {
log.LogError("Could not send message: ...");
}
return new OkObjectResult(null);
}
}
}
使用系统;
使用System.IO;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.Azure.WebJobs;
使用Microsoft.Azure.WebJobs.Extensions.Http;
使用Microsoft.AspNetCore.Http;
使用Microsoft.Extensions.Logging;
使用Newtonsoft.Json;
名称空间_20201012
{
公共静态类函数1
{
[功能名称(“功能1”)]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=null)]HttpRequest请求,
[ServiceBus(“Bowman 1012”,Connection=“ServiceBusConnectionString”)]IAsyncCollector outputServiceBus,
ILogger日志)
{
尝试
{
等待outputServiceBus.AddAsync(“Item1”);
}抓住{
LogError(“无法发送消息:…”;
}
返回新的OkObjectResult(空);
}
}
}
这种输出绑定用法不适合您的要求,请查看我的答案。问题是我的函数不返回IActionResult。它返回队列的消息。我应该返回什么而不是OkObjectResult(null)?空消息?