2017-07-26 39 views
0

我已經創建了一個Azure函數來保存Iot Hub中的SQL數據庫中的數據,並且工作正常,現在我想將異常和錯誤保存到Azure存儲表中,因此我添加了try{ } catch(err){}但這不起作用。請糾正我。謝謝!如何從Azure函數js中存儲異常/錯誤?

我的功能就是在這裏

module.exports = function (context, iotHubMessage) { 

try { 
    var strMsg = JSON.stringify(iotHubMessage); 
    context.log('Message received: ' + strMsg); 

    var ob1 = { "employee_idw": 444, "last_name": "Teller", "first_name": "Saara", "age": 34, "salary": 87000 }; 
    //I misspelled 'employee_idw' to generate error 

    var ob2 = { "employee_id": 555, "last_name": "Teller", "first_name": "Saara", "age": 31, "salary": 87000 }; 

    ob1.EventProcessedUtcTime = new Date; 
    ob2.EventProcessedUtcTime = new Date; 

    var arr = []; 
    arr.push(ob1); 
    arr.push(ob2); 

    context.bindings.outputTable = arr; 


    context.done(); 
} catch (err) { 
    context.log('CCC Error' + err); // even can not see this message in log 
    context.bindings.error= { "partitionKey": partitionKey, "rowKey": rowKey, "data": err }; 
} 
}; 

看到這是JSON文件

{ 
"bindings": [ 
{ 
    "type": "eventHubTrigger", 
    "name": "myEventHubMessage", 
    "path": "myeventhub", 
    "consumerGroup": "$Default", 
    "connection": "PBCorIOTHub_events_IOTHUB", 
    "cardinality": "many", 
    "direction": "in" 
}, 
{ 
    "type": "apiHubTable", 
    "name": "outputTable", 
    "dataSetName": "default", 
    "tableName": "employees", 
    "connection": "sql_SQL", 
    "direction": "out" 
}, 

{ 
    "type": "table", 
    "name": "error", 
    "tableName": "dddtTest", 
    "connection": "cccteststr_STORAGE", 
    "direction": "out" 
} 
], 
"disabled": false 
} 
+0

爲什麼拼寫錯誤屬性會在函數內部產生錯誤?對於表格存儲,您只需要第二個輸出綁定,並在'catch'塊中分配它。 – Mikhail

+0

'context.bindings.outputTable = arr'這是我的SQL表,所以我認爲它會產生錯誤,我想將這個錯誤保存在Azure存儲表中。 –

+0

它爲什麼會產生錯誤?這是一個JS變量賦值給另一個變量。寫入SQL會在函數退出後異步發生。 – Mikhail

回答

0

您在使用Azure的SQL Azure的或表存儲來存儲數據?從您的代碼看,您使用的是Azure表格存儲。我問的原因是因爲更改的屬性名稱不會導致函數中的錯誤。相反,表存儲將創建一個拼寫錯誤名稱的新屬性。

像米哈伊爾建議存儲一個函數內部引起的錯誤,你所要做的就是創建另一個輸出綁定併爲其分配異常。

然而並非所有異常都發生在函數上下文中。例如,function.json配置中的錯誤可能會導致連接到存儲的錯誤。這會導致函數執行在功能代碼上下文之外失敗。 Azure功能與Application Insights直接集成,可以幫助監控您正在查找的內容。這裏是一篇博客文章,可以展示如何配置Application Insights。

https://blogs.msdn.microsoft.com/appserviceteam/2017/04/06/azure-functions-application-insights/

+0

'context.bindings.outputTable = arr'這是我的SQL表,所以我認爲它會產生錯誤,我想將這個錯誤保存在Azure存儲表中。 –