簡體   English   中英

HTTP 觸發器不返回 Azure 函數 v2 中的堆棧跟蹤

[英]HTTP trigger does not return stacktrace in Azure Functions v2

考慮一個引發異常的簡單 HTTP 觸發器。 當我通過 Postman 調用此觸發器時,它返回 500 內部服務器錯誤,但正文為空。 作為開發人員,我想查看堆棧跟蹤,以便快速調試正在發生的事情。

// Azure Functions v2
[FunctionName("HttpTrigger2")]
public static async Task<HttpResponseMessage> HttpTrigger2(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestMessage req)
{
    throw new System.Exception("I want to be in the response body.");
}

這是在本地運行的。 我還沒有遠程測試過。

我相信 Azure Functions v1 確實顯示了堆棧跟蹤。

我知道有多種檢查日志的方法,例如將環境連接到 AppInsights。 我正在尋找服務器的即時響應。

應當設計使v2函數不再像v1那樣返回堆棧跟蹤。 在遠程Azure站點上,v1和v2函數均不會返回堆棧跟蹤。 設計是合理的,堆棧跟蹤用於調試,而響應主體顯然沒有。 隨着堆棧跟蹤作為響應返回,我們似乎公開了冗長的信息,有時還提供了私人信息。

如果在本地調試時為了方便起見,希望獲取異常作為響應,請捕獲異常並將其作為響應返回。

使用HttpRequestMessage

        try
        {
            throw new System.Exception("I want to be in the response body.");
        }
        catch (Exception exception)
        {
            log.LogError(exception, exception.Message);
            return req.CreateResponse(HttpStatusCode.InternalServerError, exception);
        }

在v2中,我們也可以使用HttpRequest ,響應類型應該為IActionResult

        try
        {
            throw new System.Exception("I want to be in the response body.");
        }
        catch(Exception exception)
        {
            log.LogError(exception, exception.Message);
            var res = new ObjectResult(exception)
            {
                StatusCode = StatusCodes.Status500InternalServerError
            };
            return res;
        }

您還可以在您的機器中將環境變量 CLI_DEBUG 添加到 1 以在本地環境、調試等中獲得完整的異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM