IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[contribution] logger: votre avis


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 46
    Par défaut [contribution] logger: votre avis
    Bonjour à tous,

    voilà, je sais bien que c'est déjà fais, mais j'ai voulu faire un logger pour plusieurs raisons: pour apprendre certaines bases, parce que ce logger est destiné à une application qui, pour différentes raisons, doit utiliser un minimum de libs externes, etc.

    Bref, je vous présentes ici mon header trés épuré (plus de pare-feu de compil, etc.), en espérant que vous aurez un peu de temps pour me dire ce que vous en pensez:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    enum LOG_LEVEL
    {
    	LOG_DEBUG,	
    	LOG_WARNING,
    	LOG_ERROR,
    	LOG_CRITICAL
    };
     
    class Logger
    {
    public:
    	Logger();
    	~Logger();
    	static int	init(const LOG_LEVEL level, const std::string logFilePath, const bool consoleOut);
    	void		log(const std::string log, const LOG_LEVEL level = LOG_DEBUG);
    	void		log(const std::string log, const bool consoleOut, const LOG_LEVEL level = LOG_DEBUG);
    	static LOG_LEVEL		logLevel;
    	static std::string	logFile;
    	static bool		consoleOutput;
    	static bool		isInitialized;
     
    private:
    	static bool	writeLine(std::string str);
    	std::string	logLevel2String(LOG_LEVEL level);
    };
     
    void LOG(const std::string log, const LOG_LEVEL level = LOG_DEBUG);
    void LOG(const std::string log, const bool consoleOut, const LOG_LEVEL level = LOG_DEBUG);
    Le principe consiste à initialiser une fois de logger puis n'utiliser que la fonction LOG(...).

    Et voici un exemple d'utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Logger::init(logLevel, logFile, true);
    LOG("test log"); //log simple
    LOG("test log avec console output", true); //log avec outout sur la console

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Sans même regarder les possibiités de configuration du log, je n'aime pas du tout l'interface que cet objet va imposer à chaque fois qu'on veut logger quelquechose. Elle m'oblige à ne logger que des strings, alors que j'aimerais pouvoir logguer des strings, des nombres, mes propres classes, des combinaison...

    Un truc genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LOG() << "Test " << 42 << monObjet;
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LOG( "Test " << 42 << monObjet);
    Ou autre écriture du genre.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    JolyLoic a raison et pour rendre ton logger plus confortable, voici un prototype de fonction à nombre d 'argument variable pour logger tes info :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void AddToLogFile(LPCTSTR szFmt,...);
    là. tu passes tes elements comme dans un printf standard

    PS : rajoute y tes paramètres, comme ton loglevel...

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void AddToLogFile(LPCTSTR szFmt,...);
    Pratique pour faire un truc moche et pas extensible

    En C++ on a fait beaucoup mieux avec le chaînage d'appels et la surcharge, comme l'a montré Loïc. D'ailleurs un bon point de départ pour un logger peut être un flux standard (ostream), qu'on peut dériver. On peut aussi combiner ça à std::streambuf (qu'on peut dériver également). Il doit y avoir de bons articles sur le sujet.

  5. #5
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    merci, merci,

    Citation Envoyé par Laurent Gomila
    D'ailleurs un bon point de départ pour un logger peut être un flux standard (ostream), qu'on peut dériver.
    En gros il faut redefinir les operateurs << pour chaque type d'objet ?

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 46
    Par défaut
    Merci pour vos remarques

    J'avais hésité à utiliser les opérateurs de flux, mais étant donné que je ne connais pas grand chose sur le sujet, j'avais abandonné. Et puis je n'en voyais pas trop l'intérêt. Maintenant je le vois trés clairement.
    Je vais le faire, ça me fera un bon excercice


  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    En gros il faut redefinir les operateurs << pour chaque type d'objet ?
    Justement non, l'intérêt de dériver de std::ostream est entre autres d'avoir ces surcharges déjà disponibles.
    Par contre si tu ne dérive pas de std::ostream, tu vas devoir toutes te les taper.

Discussions similaires

  1. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 22h00
  2. Qui se sert de Together ici ? votre avis ?
    Par Matthieu Brucher dans le forum Autres
    Réponses: 28
    Dernier message: 25/08/2006, 09h44
  3. Donnez votre avis sur les articles de Developpez
    Par Anomaly dans le forum Contribuez
    Réponses: 37
    Dernier message: 29/05/2006, 21h48
  4. [Débat] Votre avis sur la section "Dev Web"
    Par Marc Lussac dans le forum Evolutions du club
    Réponses: 31
    Dernier message: 03/03/2004, 20h55
  5. Réponses: 4
    Dernier message: 22/05/2003, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo