1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
static Write()
{
// On vérifie l'existence du dossier, on le crée si besoin
if (!Directory.Exists(nomDossier))
Directory.CreateDirectory(nomDossier);
if (!File.Exists(nomFichier))
{
StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?><logs/>");
using (FileStream fs = new FileStream(nomFichier, FileMode.Create, FileAccess.Write, FileShare.Read))
{
using (StreamWriter sw = new StreamWriter(fs))
sw.Write(sb);
}
}
}
/// <summary>
/// Ces variables globales permettent de notifier le chemin du dossier
/// Ainsi que le nom du fichier
/// </summary>
private static string nomDossier = @"C:\Log", nomFichier = nomDossier + @"\" + "log.xml";
/// <summary>
/// Fonction permettant d'ajouter un log avec un message simple dans le XML
/// </summary>
/// <param name="message">Message à ajouter</param>
public static void write(bool estMessage, string message)
{
if (estMessage)
ajoutLog(new Log(TYPE.Message, message));
else
ajoutLog(new Log(TYPE.Error, message));
}
/// <summary>
/// Fonction surchargée pour prendre en compte les exceptions
/// </summary>
/// <param name="e">Exception à charger</param>
public static void write(Exception e)
{
ajoutLog(new Log(e));
}
/// <summary>
/// Fonction réalisant l'écriture dans le fichier XML
/// </summary>
/// <param name="logAdd">Log à écrire dans le fichier</param>
private static void ajoutLog(Log logAdd)
{
XDocument docXml = new XDocument();
XElement logs;
//On charge les informations de notre fichier
docXml = XDocument.Load(nomFichier);
logs = docXml.Element("logs");
//On spéficie ici les paramètres d'écriture du XML...
XmlWriterSettings ws = new XmlWriterSettings();
//Afin de faire une indentation propre de notre fichier
ws.Indent = true;
/* On va ensuite créer un élément log pour inscrit les informations nécessaires
* at = heure de création
* type = type du log
* On charge ensuite le message que l'on a pour le log
*/
XElement add =
new XElement("log",
logAdd.exceptionMessage,
new XAttribute("at", logAdd.at.ToString()),
new XAttribute("type", logAdd.type.ToString()));
// On va ensuite réaliser différent traitement selon le type de notre Log ...
if (logAdd.type == TYPE.Exception)
{
// On crée un élément pour l'attribut Stack
XElement stackAttrib = new XElement("stack", logAdd.stackException);
// On rajoute un fils à l'élement log
add.Add(stackAttrib);
// On vérifie que l'exception possède une innerException ...
if (logAdd.innerMessage != null)
{
/*... On va alors créer un élément afin de créer cette inner avec
* les information nécessaires (at/type/message/stack) ...
*/
XElement innerElement =
new XElement("log", logAdd.innerMessage,
new XAttribute("at", logAdd.at.ToString()),
new XAttribute("type", "InnerException"),
new XElement("stack", logAdd.stackInner)
);
// ... Puis finalement ajouter cette nouvelle branche au log
add.Add(innerElement);
}
}
// On ajoute finalement notre branche "log" à notre racine
logs.Add(add);
//Puis on sauvegarde notre ajout
docXml.Save(nomFichier);
} |
Partager