Existe-t-il des bibliothèques de journalisation permettant la journalisation structurée des objets, ce qui signifie que la sortie est sous une forme structurée, telle que JSON ou XML?Comment puis-je faire une journalisation structurée?
Au niveau de l'application, je veux utiliser une syntaxe laconique (l'enregistrement a tendance à cacher le code d'application), tels que
logger.info("Deleting user", user)
logger.info(part("Deleting user", user), part("Account", account), part("Something else", someValue));
Au niveau du fichier journal, Je reçois des JSON (etc) bien structurés, avec des méta-données (thread, MDC, temps, niveau, etc) comme une enveloppe, avec mon propre message comme un objet JSON structuré à l'intérieur, par exemple
"log" : {
"time": <timestamp>,
"level": "INFO",
"thread": <thread-name>,
"MDC": [MDC info added by application code],
etc...
"message": {
"Message": "Deleting User",
"User": <JSON object of the user serialised>
}
}
Bien sûr, il ne devrait pas être joliment imprimé dans le fichier journal.
Il serait cool que les objets de domaine (par exemple l'utilisateur) puissent implémenter une interface Loggable
qui a des méthodes pour sérialiser l'état pour différents niveaux de consignation, par ex.
- niveau INFO donne un résumé
- niveau DEBUG donne plus, des données plus profondes, récursive
* Certains aggrégateur de journal pourrait alors donner un sens des journaux à un niveau sémantique . Les journaux sont formatés de manière cohérente permettant la recherche, etc. *
J'ai déjà mis en place quelques fonctions qui me permettent de faire en sorte que les paires clé/valeur soient formatées mais cela ne me donne pas Tout ce que je veux. Cela fonctionne, en normalisant les valeurs clés /, le formatage des valeurs, mettant en évidence les valeurs NULL, etc, mais il ne dégage pas de JSON et ne peut pas déléguer la mise en forme de l'objet: -
logger.info(logString(part("Deleting user", user), part("Account", account), part("Something else", someValue)));
Toutes les idées?
Essayez https://github.com/michaeltandy/log4j-json –
@DavidKerr vous voulez json Chaîne structurée comme au-dessus de votre maison? –
@MayankPandya c'est un début, mais il ne met que les méta-données en JSON, il ne structure pas mes objets en JSON (la partie "message" de mon exemple JSON). –