如何在Azure Functions中使用结构化日志记录

时间:2017-08-19 14:16:37

标签: azure logging azure-functions

我在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目录具有层次结构。

enter image description here

黄色突出显示的文件包含我的日志声明:

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;我的真实函数应用程序目录中的日志语句。

我应该在这里期待什么?最后,我希望有一个接收器用于从我的所有应用程序组件进行日志记录,并充分利用结构化日志记录。

2 个答案:

答案 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