Exception déstructuration dans Serilog
Serilog a un moyen pratique de déstructuration des objets comme indiqué dans cet exemple:
logger.Debug(exception, "This is an {Exception} text", exception);
logger.Debug(exception, "This is an {@Exception} structure", exception);
La première ligne de causes de l'enregistreur de journal d'une exception en tant que texte brut (en faisant appel à ToString()), et la deuxième ligne de causes de l'enregistreur à l'exception d'écriture propriétés des champs distincts. Mais que penser de cette surcharge:
logger.Debug(exception, "This is an exception", exception);
Celle-ci prend une exception comme premier argument, et il est toujours écrit comme une chaîne de caractères. Ce que je voudrais faire est d'activer la journalisation de l'exception, de façon structurée. Il est possible de configurer Serilog pour y parvenir?
Mise à JOUR. Je pense que cette question conduit à un autre aspect de l'exploitation forestière exceptions: comment puis-je m'assurer que les messages sont enrichies avec des propriétés d'exception (de sorte qu'ils sont enregistrés de manière structurée dans le riche éviers comme Elasticsearch), sans écrire de toutes les propriétés d'exception pour le rendu du texte de message (donc, le texte brut enregistreurs ne sont pas remplis avec des énormes tas de détails de l'exception).
OriginalL'auteur Vagif Abilov | 2014-08-15
Vous devez vous connecter pour publier un commentaire.
Il y a un fil de discussion du forum discuter de ce, dans lequel un couple de solutions sont présentées. Thomas Bolon a créé une "exception déstructuration' extension que vous pouvez trouver dans un Résumé.
Dans ce cas, vous utilisez seulement cette syntaxe:
Il n'y a pas besoin d'ajouter de l'exception dans la chaîne de format.
Pour assurer l'exception est imprimé sur du texte éviers, assurez-vous juste
{Exception}
est inclus dans le modèle de sortie. Le standard intégré de ceux déjà présent, par exemple:Notez que la réponse ci-dessous se réfère à une mise en œuvre complète de l'idée originale dans la Gist, disponible sur github, et que le package Nuget Serilog.Des Exceptions.
OriginalL'auteur Nicholas Blumhardt
Prendre un coup d'oeil à Serilog.Exceptions journaux détails de l'exception et de propriétés personnalisées qui ne sont pas sortie en Exception.ToString().
Cette bibliothèque a un code personnalisé à traiter avec des propriétés supplémentaires sur la plupart des communes de types d'exceptions et ne tombe en arrière à l'aide de la réflexion pour obtenir des informations supplémentaires si l'exception n'est pas pris en charge par Serilog.Les Exceptions à l'interne.
Ajouter le package NuGet, puis ajouter le enricher comme suit:
Votre JSON journaux va maintenant être complétée détaillée à l'exception de l'information et même personnalisé de propriétés d'exception. Voici un exemple de ce qui se passe lorsque vous vous connectez à un DbEntityValidationException de EntityFramework (Cette exception est connue pour avoir profondément imbriqués propriétés personnalisées qui ne sont pas inclus dans le
.ToString()
).Le code ci-dessus les journaux suivants:
Serilog.Exceptions prend en charge l' .NET Standard et prend en charge de nombreux types d'exception, sans réflexion, mais nous aimerions ajouter d'autres, n'hésitez pas à contribuer.
Tip Top - Lisible Par Les Traces De Pile
Vous pouvez utiliser le Ben.Demystifier package NuGet pour obtenir lisible par les traces de pile pour vos exceptions ou les serilog-enrichers-démystifier package NuGet si vous utilisez Serilog.
OriginalL'auteur Muhammad Rehan Saeed
Cette situation doit être évitée complètement. Les deux ElasticSearch et Serilog ne sont pas conçus avec à l'esprit l'idée que vous serez de la sérialisation d'objets arbitraires. La journalisation des objets avec le conflit formes produira dans la cartographie des exceptions dans ElasticSearch. Si vous utilisez le ElasticSearch évier dans NuGet tout ce qui résulte en une cartographie des conflits seront perdues. Aussi Serilog ne gère pas Cyclique des relations de manière à ce résultat en profondeur limiteur de selflog erreurs. Il y a un projet qui tente de remédier à cela en déstructurant dans les dictionnaires et en la transmettant à Serilog, mais vous aurez toujours le vent avec salissant les journaux et à la cartographie des exceptions.
Serilog: https://nblumhardt.com/2016/02/serilog-tip-dont-serialize-arbitrary-objects/
J'ai trouvé qu'il est préférable d'être précis sur l'enregistrement des propriétés d'exception basé sur ce que vous trouvez utile dans l'exception.
L'un des problèmes avec la Serilog ElasticSearch évier est que vous ne verrez pas de cartographie des exceptions, il va tout simplement être perdu, à cause de ce problème: github.com/serilog/serilog-sinks-elasticsearch/issues/25
OriginalL'auteur Daniel Leach