Azure功能详细记录内部服务器错误

时间:2019-05-29 14:52:03

标签: azure azure-functions

我有一个带有HTTP触发器的v2 Azure函数。有时,它将返回500,而没有其他信息。我想将其设置为记录更详细的信息,包括错误消息和堆栈跟踪。

我尝试将host.json设置如下:

{
  "version": "2.0",
  "logging": {
    "logLevel": {
      "default": "Trace"
    }
  }
}

,但是在本地运行时并没有得到任何更详细的信息。

由于内置的​​日志记录设置似乎无法使我失败,因此我正在尝试最高级别的try/catch,但是我不知道如何同时返回状态码500和 em>和异常对象。

[FunctionName("Http-UploadFiles")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "uploadFiles")] HttpRequest request,
    ILogger log)
{
    try
    {
        var requestBody = await new StreamReader(request.Body).ReadToEndAsync();
        var body = JsonConvert.DeserializeObject<JObject>(requestBody);

        var inventorySetGuid = Guid.Parse(body["inventorySetGuid"].ToString());
        var files = body["files"].Select(FileComponentUtilities.GetFile).ToList();
        var componentsAndErrors = await FileComponentUtilities.InsertSuitableComponentFiles(files, inventorySetGuid);

        return new JsonResult(componentsAndErrors, StorageFramework.Storage.SerializerSettings);
    }
    catch (Exception exception)
    {
        return new StatusCodeResult(500);
    }
}

此代码返回状态码500,但不返回异常对象。我找不到合适的IActionResult来返回带有异常对象的500。如何为此v2 Azure函数完成此操作?

1 个答案:

答案 0 :(得分:1)

您可以返回ContentResult,以便您设置任何状态码,内容和内容类型。

return new ContentResult
{
    StatusCode = 500,
    Content = "Something went wrong"
};

但是不要使用它返回您的堆栈跟踪!这是您应用程序的安全问题,有更好的方法...在功能应用程序中打开Application Insights并使用它来查看您的跟踪和错误。