1
根據Serilog's documentation,可以記錄字典,並且serilog將解構它,包括深入解構對象。解構一個複雜對象的字典
如果是這樣的話,沒有任何人有一個想法,爲什麼預期下面的代碼不起作用:
public class ActionLoggingAttribute : ActionFilterAttribute
{
private ILogger _logger;
public ActionLoggingAttribute(ILogger<ActionLoggingAttribute> logger)
{
_logger = logger;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
if (context.ActionArguments.Count > 0)
{
_logger.LogInformation("Request parameters: {@parameters}", new Dictionary<string, object>(context.ActionArguments));
}
}
}
結果如下輸出:
{... "MessageTemplate":"Request parameters: {@parameters}","Properties":{"parameters":"[newCard(key), Namespace.ClassNameInsteadOfTheActualObject(value)]" ...}}
問題:
- 它看起來像一個數組,不像字典。爲什麼?還包含引號。
- 爲什麼對象沒有被解構?
大多數C#JSON庫將字典序列化爲一個具有屬性的對象,其中屬性等於字典中的鍵。它比'[{「key」:「someKeyname」,「value」:1234},{...}]更小且更少詳細信息' – Tseng
如果是這樣,我期望它被序列化爲'{「key1」: 「value1」,「key2」:「value2」}'。 在我的情況'newCard'是關鍵,沒有正確序列化的對象是值。就像現在一樣,它看起來就像序列化爲一個數組。 – DotnetProg
這看起來像是_Serilog.Extensions.Logging_適配器(它連接ASP.NET Core的日誌記錄與Serilog提供程序)中的一個錯誤。編寫的代碼應該按照您的預期工作。 –