如何使用 Azure Web 作业 SDK 添加有关异常处理的自定义数据?



我有一个简单的Azure函数,它返回到队列:

private readonly TelemetryClient _telemetryClient;
[return: Queue("%ReturnQueue%")]
public async Task<string> Run([QueueTrigger("%RequestQueue%")] string msg, ILogger log)
{
try
{
//Some dependency calls   
}
catch(Exception ex)
{
var dic = new Dictionary<string,string>();
dic.Add("Id", someId);
dic.Add("CustomData", cusomData);
_telemetryClient.TrackException(ex, dic);
}
}

我显然收到一个编译错误,说并非所有代码路径都返回一个值。 问题是,如果我在 catch 块的末尾添加一个throwAzure Functions运行时会在 appinsights 门户上复制该 excpetion。如何像这样将自定义数据添加到我的异常中?

您可以创建自己的异常类型:

public class MyCustomException : Exception
{
public string Id {get;set;}
public string CustomData {get;set;}
public Exception RootException {get;set;}
public MyCustomException(string id, string customData, Exception ex)
{
Id = id;
CustomData = customData;
RootException = ex;
}
}

private readonly TelemetryClient _telemetryClient;
[return: Queue("%ReturnQueue%")]
public async Task<string> Run([QueueTrigger("%RequestQueue%")] string msg, ILogger log)
{
try
{
//Some dependency calls   
}
catch(Exception ex)
{
//var dic = new Dictionary<string,string>();
//dic.Add("Id", someId);
//dic.Add("CustomData", cusomData);
var customEx = new MyCustomException(someId, cusomData, ex);
_telemetryClient.TrackException(customEx);
}
finally
{
return "";
}
}

PS:在MyCustomException中,您实际上可以拥有字典而不是字符串属性。

最新更新