Ceci va vous permettre de centraliser en un point unique de vos application l'écriture des logs (dans un fichier ou l'EventView) et d'ajouter à ce message inclu dans ce log des données utiles au debug.
Pour ce faire, il faut commencer par dériver de la classe Exception
public class ExceptionPerso : Exception
Il faut mettre un constructeur approprié
public ExceptionPerso(Exception e) { _ExcepOrigine = e; }
Vous n'aurez pas manqué de constater qu'il manque la donnée membre _ExcepOrigine, donc ajoutons la, et par la même occasion les membres utiles pour notre exception perso:
private int _Data1 = 0; private string _Data2 = String.Empty; private Exception _ExcepOrigine = null;
Pour les renseigner, il faudra des accesseurs:
public int Data1 {set{_Data1 = value;}} public string Data2 {set{_Data2 = value;}}
Inutile de mettre un accesseur pour l'exception d'origine, elle est renseignée via le constructeur.
Une fois la classe a peu prêt au point, il reste à mettre les méthodes.
A priori la méthode WriteInLog sera utile:
public void WriteInLog() { string DetailInfo = ""; DetailInfo += "La donnéz 1 est = " + _Data1.ToString() + Environment.NewLine; DetailInfo += "La donnée 2 " + _Data2 + Environment.NewLine; Log.Write(DetailInfo, _ExcepOrigine, Log.LogLevel.Fatal); }
Bien sur on peut utiliser un stringBuilder.
Et la classe Log reste à faire (peut être un prochain post si quelqu'un est intéressé)
Maintenant, comment faire remonter cette erreur ? Rien de plus simple. Dans vos catch (ou via un throw voulu), ajouter des throw jusqu'au plus au niveau du programme
catch (Exception e) { ExceptionPerso ePerso; if (!(e is ExceptionPDF)) { ePerso = new ExceptionPerso(e); } else { ePerso = (ExceptionPerso)e; } ePerso.Data1 = _IdUser; ePerso.Data2 = "A cet endroit du code, surement un probleme avec le user"; throw ePerso; }
A votre dispo