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

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

Ce document intitulé « [c#]Centraliser l'écriture des logs avec une exception personnalisée... » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.