[英]Structured Logging in Azure Functions
我試圖讓結構化日志記錄在 Azure Function 中工作,但它在我這邊不起作用。
我寫了一個這樣的簡單應用程序
[FunctionName("Dummy")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous)]HttpRequest request, ILogger log)
{
var instance = new User
{
Name1 = "foo",
Name2 = "bar"
};
log.LogInformation("Test1: {$Test}", instance);
log.LogInformation("Test2: {@Name}", instance);
log.LogInformation("Test3: {@Name}", new { Name1 = "abc", Name2 = "def" });
log.LogInformation("Test4: {Vorname} {Nachname}", instance.Name1, instance.Name2);
return new OkResult();
}
public class User
{
public string Name1 { get; set; }
public string Name2 { get; set; }
}
output 看起來像這樣:
Test1: Company.FunctionApp1.Function+User
Test2: Company.FunctionApp1.Function+User
Test3: { Name1 = abc, Name2 = def }
Test4: foo bar
我不知道為什么解構對動態類型起作用,但對定義的 class 不起作用。 我發現了許多正常日志記錄的示例,沒有 object 的解構,但我認為它應該開箱即用。
我錯過了什么嗎?
測試 3 打印為{ Name1 = abc, Name2 = def }
,因為定義的類型為匿名 object,編譯器為其生成ToString()
方法以返回具有屬性和值映射的字符串。
檢查此討論。
您可以通過反編譯來驗證。
因為,Test2 和 Test1 使用 object 並且沒有覆蓋ToString()
定義,這就是返回 TypeName 的原因。
正確的方法是 go 與 Test4 以便Vorname
和Nachname
記錄為自定義屬性並可用於過濾。
user1672994 的回答是對的,您可以執行以下操作:
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace FunctionApp96
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
var instance = new User
{
Name1 = "foo",
Name2 = "bar"
};
log.LogInformation("Test1: {$Test}", instance);
log.LogInformation("Test2: {@Name}", instance);
log.LogInformation("Test3: {@Name}", new { Name1 = "abc", Name2 = "def" });
log.LogInformation("Test4: {Vorname} {Nachname}", instance.Name1, instance.Name2);
return new OkObjectResult("");
}
}
public class User
{
public override string ToString()
{
string str = "{ Name1 = " + Name1 + ", Name2 =" + Name2 + " }";
return str;
}
public string Name1 { get; set; }
public string Name2 { get; set; }
}
}
你會得到:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.