Serilog: Admite de forma nativa objetos dinámicos JSON.NET (JObject)

Creado en 2 may. 2013  ·  13Comentarios  ·  Fuente: serilog/serilog

En Twitter mencionaste que debería ser bastante sencillo de implementar a través de IDestructuringPolicy
;)

enhancement

Comentario más útil

Todos 13 comentarios

Estaba tratando de que esto funcionara a través de IDestructuringPolicy pero me temo que no funcionará.

Una mirada rápida a través del código base parece indicar (aquí https://github.com/serilog/serilog/blob/master/src/Serilog/Parameters/PropertyValueConverter.cs?source=c#L112) que PropertyValueConverter primero trata los objetos como una colección (todos los JToken s son IEnumerable ) y por lo tanto nunca se molesta en verificar con IDestructuringPolicy .

Creo que quizás darle al IDestructuringPolicy una prioridad más alta (verificándolo primero y luego volviendo al comportamiento predeterminado) podría ofrecer una salida, pero puedo estar completamente equivocado, solo pasé 2 minutos mirando esto código.

Creé una solución rápida por ahora ... agregando un nivel de indirección.

Agregué una clase llamada JObjectWrapper que no es IEnumerable y envuelvo mi JObject con ella. Ahora llaman a mi IDestructuringPolicy y el mundo vuelve a ser un lugar feliz.

@kkozmic, ¿cómo está resultando este? ¿Vale la pena que eliminemos la limitación que mencionaste anteriormente? ¿Algún otro pensamiento? Salud :)

bueno, es una solución desagradable :) Me lleva a donde necesito estar, pero prefiero tener una solución más elegante que esa si es posible.

¿Nueva interfaz, quizás?

public interface ISequenceConversionPolicy
{
   bool TryConvertToSequence(object value, ILogEventPropertyValueFactory propertyValueFactory, out SequenceValue result);
}

Además, tal vez:

public interface IDictionaryConversionPolicy

:)

Cerrando por ahora, pero abierto a trabajar en este si alguien está interesado en probar un PR. ¡Gracias por toda la gente de entrada! :)

@kkozmic ¿ Alguna posibilidad de que pueda echar un vistazo a tu IDestructuringPolicy (el que funciona con el contenedor)?

Lo siento, ya no tengo ese código conmigo.

El martes, 3 de febrero de 2015 a las 4:38:45 a. M., Harry McIntyre [email protected]
escribió:

@kkozmic https://github.com/kkozmic Cualquier oportunidad que pueda echar un vistazo
su IDestructuringPolicy (la que funciona con el contenedor)?

-
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/serilog/serilog/issues/30#issuecomment -72500600.

371 se hace eco de este, creo que es uno para nosotros para reabrir, pero podría ser un "2.0"

La compilación 1.4.168 elimina la limitación que hizo esto incómodo; Me encantaría ver un _Serilog.Extras.JObject_ o similar que lo aproveche :-)

¡Gracias @Jaben por clavar esto!

¡Bonito!

@nblumhardt eso es increíble, ¡gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones