我在Azure函数中使用相对较新的ILogger(vs. TraceWriter)选项,并尝试了解如何捕获日志。
这是我的功能:
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, ILogger log)
{
log.LogTrace("Function 1 {level}", "trace");
log.LogWarning("Function 1 {level}", "warning");
log.LogError("Function 1 {level}", "error");
return req.CreateResponse(HttpStatusCode.OK, "Success!!!!");
}
当我查看服务器日志时,LogFiles目录具有层次结构。
黄色突出显示的文件包含我的日志声明:
2017-08-19T13:58:31.814 Function started (Id=d40f2ca6-4cb6-4fbe-a05f-006ae3273562)
2017-08-19T13:58:33.045 Function 1 trace
2017-08-19T13:58:33.045 Function 1 warning
2017-08-19T13:58:33.045 Function 1 error
2017-08-19T13:58:33.075 Function completed (Success, Id=d40f2ca6-4cb6-4fbe-a05f-006ae3273562, Duration=1259ms)
结构化目录在这里没有任何内容,但它似乎有各种各样的&#34; codeddiagnostic&#34;我的真实函数应用程序目录中的日志语句。
我应该在这里期待什么?最后,我希望有一个接收器用于从我的所有应用程序组件进行日志记录,并充分利用结构化日志记录。
答案 0 :(得分:2)
从Azure Functions收集结构化日志的最佳方法是使用Application Insights。您已经定义了Logger基于ILogger,可以定义一个模板来指定要记录的属性。然后,在Application Insights跟踪上,使用Application Insights查询语言(又名Kusto),您可以使用名称customDimensions.prop __ {name}访问这些属性的值。
您可以在此https://platform.deloitte.com.au/articles/correlated-structured-logging-on-azure-functions
上找到有关如何使用Azure Functions v2进行操作的示例。答案 1 :(得分:1)
我有同样的问题。日志文件记录器并不真正尊重结构化日志记录,但如果您使用AppInsights for Azure Functions,它实际上会为结构化日志记录添加自定义属性
我在这里进行了一次对话 https://github.com/Azure/azure-webjobs-sdk-script/issues/1675