Ajouter des informations supplémentaires à une exception personnalisée
J'ai créé une exception personnalisée pour un problème très spécifique qui peut aller mal. - Je recevoir des données à partir d'un autre système, et je lève une exception si les bombes, tout en essayant d'analyser les données. Dans mon personnalisée d'exception, j'ai ajouté un champ appelé "ResponseData", afin que je puisse savoir exactement ce que mon code ne pouvais pas gérer.
Dans la coutume des exceptions comme celle-ci, devrait supplémentaire des données de réponse aller dans l'exception "message"? Si il y va, le message pourrait être énorme. Je le veux parce que j'en suis l'aide de Elmah, et c'est comment je peux accéder à ces données.
La question est donc:
- Comment puis-je obtenir Elmah pour enregistrer des informations supplémentaires à partir d'un champ dans une exception personnalisée
OU
- Si les détails de l'exception d'aller dans le "message" de la propriété?
OriginalL'auteur | 2008-09-07
Vous devez vous connecter pour publier un commentaire.
Vous ne devriez pas remplir
.Message
avec les informations de débogage, mais plutôt avec un concis, utile morceau de texte.http://msdn.microsoft.com/en-us/library/system.exception.message.aspx
Données de réponse n'est pas considérée comme une description.
N'étant pas familier avec elmah, je ne peux pas vous dire comment étendre le
Exception
classe tout en l'utilisant. Ne elmah mettre en place son propre sous-classe deException
? Ou une interface? Pouvez-vous la sous-classe vous-même?OriginalL'auteur Sören Kuklau
Pas, comme Sören déjà souligné. Cependant, votre type d'exception pourrait remplacer
ToString
et raisonnablement ajouter les données de réponse. C'est tout à fait normal, la pratique suivie par de nombreux types d'exceptions dans la BCL (Base Class Library) de sorte que vous ne pourrez pas vous trouver nage à contre-courant. Par exemple, jetez un oeil à la Système.IO.FileNotFoundException.ToString mise en œuvre dans SSCLI (Rotor):Comme vous pouvez le voir, il ajoute le contenu de FusionLog des biens, qui représentent supplémentaire l'information dans le cas de l'assemblée échecs de chargement.
ELMAH stocke le résultat de l'appel d'
ToString
sur une exception, car les détails de l'erreur, donc si vous avezToString
mis en œuvre, comme le prescrit, l'information se connecté sans plus de travail. Le seul problème est que le connecté détail sera non structurées texte.OriginalL'auteur Atif Aziz
L'Exception de la classe contient un dictionnaire de Données nommée, je crois) que vous pouvez utiliser pour associer des données personnalisées avec une vanille d'exception.
rappelez-vous que si une exception est sérialisé, tout à l'intérieur, il doit être sérialisable aussi - donc, il est bon pour extraire uniquement ce dont vous avez besoin si votre objet est compliqué
OriginalL'auteur Gabriel Isenberg
Je ne pas bien comprendre la question, mais vous semblez être demander quoi faire avec d'autres données d'exception, si ce n'est pas votre question hésitez pas à l'ignorer.
Je pense que d'une question importante à se poser est quel est exactement le message de l'exception? Il n'est pas de savoir où l'exception est venu, la trace de la pile est pour ça; c'est pas pour encapsuler une exception dans un cadre plus général, qui doit être fait avec le InnerException champ; dans le cas où l'exception est seulement rehaussée d'une place particulière dans votre code, il n'est même pas pour décrire ce genre d'erreur que vous a - c'est ce que le type de l'exception est pour.
Généralement j'utilise le champ message de fournir simple, lisible par l'homme, les conseils qu'un programmeur qui n'est pas moi, en voyant cette erreur pour la première fois peut utiliser pour acquérir une compréhension du système sous-jacent. Je considère que le champ de message approprié pour une courte durée (une seule phrase) explication, un indice quant à la façon dont cette erreur est fréquemment soulevée, ou une référence à des lectures complémentaires.
Donc, comme je le comprends votre question, je pense que la meilleure façon de conserver les "informations supplémentaires" qui est reçu à partir d'un autre système comme un InnerException. Je ne sais pas en apparence, mais si cela vaut son sel il va vérifier pour InnerExceptions et de les stocker.
OriginalL'auteur George Mauer
Je ne comprends pas la question, vous êtes à l'extension du Système.Exception, et vous avez déjà ajouté le Elmah champ. C'est là où il appartient, en tant que propriété publique de l'exception elle-même.
OriginalL'auteur Danimal
Elmah est un module http qui enregistre les exceptions non gérées.
Je pense que c'est juste une limitation de Elmah, car il ne stocke pas les champs personnalisés. Je crois que je vais demander à ces gars-là. J'ai le champ supplémentaire pour les données de réponse, mais en apparence, ne pas les stocker.
OriginalL'auteur