Donnez votre avis

[c#]Centraliser l'écriture des logs avec une exception personnalisée...

Posez votre question

Introduction


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.

Tutoriel


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
Ajouter un commentaire

Commentaires

Commenter la réponse de cs_coq