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 : 51
    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