Gemäß Serilog's documentation ist es möglich, ein Wörterbuch zu protokollieren, und serilog wird es destrukturieren, einschließlich der detaillierten Destrukturierung von Objekten.Destrukturieren eines Wörterbuchs komplexer Objekte
Wenn das der Fall ist, hat jemand eine Idee, warum der folgende Code als nicht erwartet:
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));
}
}
}
Ergebnisse in der folgenden Ausgabe:
{... "MessageTemplate":"Request parameters: {@parameters}","Properties":{"parameters":"[newCard(key), Namespace.ClassNameInsteadOfTheActualObject(value)]" ...}}
Fragen:
- Es sieht aus wie ein Array, nicht wie ein Wörterbuch. Warum? Es enthält auch Anführungszeichen.
- Warum wird das Objekt auch nicht destrukturiert?
Die meisten C# JSON-Bibliotheken serialisieren ein Wörterbuch in ein Objekt mit Eigenschaften, wobei eine Eigenschaft einem Schlüssel im Wörterbuch entspricht. Es ist kleiner und weniger ausführlich als '[{" key ":" someKeyname "," value ": 1234}, {...}]' – Tseng
Wenn ja, würde ich erwarten, dass es als '{" key1 "serialisiert wird: "Wert1", "Schlüssel2": "Wert2"} '. In meinem Fall ist 'newCard' der Schlüssel und das Objekt wird nicht richtig serialisiert. Wie es jetzt aussieht, sieht es so aus, als wäre es als Array serialisiert worden. – DotnetProg
Das sieht verdächtig wie ein Fehler im Adapter _Serilog.Extensions.Logging_ aus (der die Protokollierung von ASP.NET Core mit dem Serilog-Provider verbindet). Der Code sollte wie erwartet funktionieren. –