0/5 (6 avis)
Snippet vu 6 974 fois - Téléchargée 16 fois
using System; namespace UtilityLib { /// <summary> /// Degré donné au message /// </summary> public enum LogLevel { MessageVeryLow = 0, MessageLow = 10, Message = 20, MessageHigh = 30, MessageVeryHigh = 40, WarningLow = 50, Warning = 60, WarningHigh = 70, ErrorLow = 80, Error = 90, ErrorHigh = 100 } /// <summary> /// Delegate d'un log /// </summary> /// <param name="from">Source du message</param> /// <param name="message">Le message</param> /// <param name="level">Le degré du message (Voir "LogLevel" pour des valeurs préféfinies) (plus il est élevé, plus il est important)</param> public delegate void LogDelegate(string from, string message, int level); public static class LogManager { /// <summary> /// Évenement déclenché lorsque quelqu'un log quelquechose /// </summary> public static event LogDelegate MessageLogged; /// <summary> /// Log d'un message formatté /// </summary> /// <param name="from">Source du message</param> /// <param name="format">Message formatté</param> /// <param name="args">Argument du message formaté</param> public static void Log(string from, string format, params object[] args) { Log((int)LogLevel.Message, from, format, args); } /// <summary> /// Log d'un message formatté /// </summary> /// <param name="level">Élément LogLevel déterminant le degré du message</param> /// <param name="from">Source du message</param> /// <param name="format">Message formatté</param> /// <param name="args">Argument du message formaté</param> public static void Log(LogLevel level, string from, string format, params object[] args) { Log((int)level, from, format, args); } /// <summary> /// Log d'un message formatté /// </summary> /// <param name="level">Nombre déterminant le degré du message (plus il est élevé, plus il est important)</param> /// <param name="from">Source du message</param> /// <param name="format">Message formatté</param> /// <param name="args">Argument du message formaté</param> public static void Log(int level, string from, string format, params object[] args) { if (MessageLogged != null) MessageLogged(from, String.Format(format, args), level); } } } /////////////////////////// /////////////////////////// // EXEMPLE D'UTILISATION // /////////////////////////// /////////////////////////// public partial class MainForm : Form { StreamWriter lowlogger; StreamWriter logger; Tournament tournoi; public MainForm() { InitializeComponent(); LogManager.MessageLogged += new LogDelegate(LogManager_MessageLogged); btnStartTournament_Click(this, new EventArgs()); // Automatic start ! } void LogManager_MessageLogged(string from, string message, int level) { DateTime now = DateTime.Now; String strNow = String.Format("{0:0000}-{1:00}-{2:00} {3:00}:{4:00}:{5:00}.{6:000}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond); string msg; if( level >= (int)LogLevel.ErrorLow ) msg = String.Format("[{0}]<{1}> !!!!!! ERROR !!!!!! {2}", strNow, from, message); else msg = String.Format("[{0}]<{1}> {2}", strNow, from, message); if (level >= (int)LogLevel.Message) { Console.WriteLine(msg); lock (logger) { logger.WriteLine(msg); } } lock (lowlogger) { lowlogger.WriteLine(msg); } } private void btnStartTournament_Click(object sender, EventArgs e) { logger = new StreamWriter("log.txt"); lowlogger = new StreamWriter("logDetail.txt"); btnStartTournament.Enabled = false; tournoi.StartTournament(); } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { if (logger != null) logger.Flush(); if (lowlogger != null) lowlogger.Flush(); logger.Close(); lowlogger.Close(); } }
1 avril 2009 à 11:41
Aujourd'hui, parcourir le web comme tu dis, c'est une chose ABSOLUMENT INDISPENSABLE quand on commence un projet, pour limiter au maximum le travail qu'on va faire (et donc le coût) et reprendre ce qu'il existe déjà, surtout quand c'est le cas de librairie open source qui demande un investissement en temps d'une trentaine de minutes pour être mise en place comme log4net.
Après c'est sûr, c'est pas toujours si simple, si la lib est tellement grande que tu dois passer plusieurs dizaines d'heures dessus pour maîtriser le contenu alors que 1 ou 2h de travail aurait suffit à faire ce que tu veux.... mais dans le cas de log4net, ce n'est pas comme ça (ça fait partie de la phase de recherche d'évaluer ce genre de chose).
En résumé: toujours chercher ce qu'il existe, si possible prendre ce qui est connu et ce que les autres utilises aussi plutôt que de faire son bricolage fait maison...Cela dit, ceci ne remet nullement en cause la présence de cette source sur le site, elle peut toujours donner des idées à d'autres. Je mentionne juste qu'il existe d'autres solutions et que je n'encourage pas les membres à utiliser ce que tu proposes dans leur projet (pour les raisons évoquées ci-dessus).
Il s'agit de mon avis personnel avec mon expérience personnelle, je conçois qu'on ne soit pas d'accord sur la totalité....
http://www.csharpfr.com/tutoriaux/UTILISATION-LOG4NET_961.aspx
31 mars 2009 à 01:06
Faut pas exagerer non plus ! Je comptais pas révolutionner le monde avec ma classe ! J'ai fait une petite classe qui en quelque ligne était pratique, j'ai réutiliser cette classe dans bon nombre de projets, ce qui m'a fait croire qu'elle pourrait être utile a d'autres personnes, je l'ai donc déposer ici. Maintenant si il aurait fallu que je parcours le web a la recherche de la moindre petite librairie existante permettant de pres ou de loin de faire ces quelques lignes avant de poster ici, bah c'est bon je vais garder mes petites classes pratiques pour moi et arrêter d'embeter les gens !
Mais bon si je suis tant dans le tord supprime la cette source tu en a le pouvoir, je n'en garderai pas rancune !
30 mars 2009 à 22:44
L'argument que tu mentionnes n'est pas valable. Depuis quand la taille d'un projet joue un rôle (surtout quand on sait quand le framework .NET lui-même fait plus de 20Mo)?
30 mars 2009 à 17:56
Merci pour le lien, je ne connaissais pas, mais je préfere de loin ma ptite classe simple ;)
30 mars 2009 à 12:41
Pourquoi réinventer la roue? log4net convient très bien pour ceci, gratuit et open source.
http://logging.apache.org/log4net/index.html
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.