Bonjour tout le monde,
je suis à la recherche d'une lib de log pour c++. En parallèle de mes recherches, j'aurais aimé avoir votre avis:
- laquelle utilisez-vous?
- pourquoi celle-là et pas une autre?
Bonjour tout le monde,
je suis à la recherche d'une lib de log pour c++. En parallèle de mes recherches, j'aurais aimé avoir votre avis:
- laquelle utilisez-vous?
- pourquoi celle-là et pas une autre?
Perso j'utilise log4cpp : http://log4cpp.sourceforge.net/
N'ayant pas eu l'occasion d'en utiliser d'autre je pourrais pas faire de comparaison. Mais je là trouve relativement puissante.
Au taf', on est sur une bibliothèque perso qui hérite un peu trop du C à mon goût (fonctions variadiques au format printf), ce qui me permet d'avoir une idée assez avancée de comment j'écrirais cela aujourd'hui (mélange de boost.format, de TLS/TSS, de streambuffers, plus facilités pour émettre un même message sur plusieurs canaux à la fois (fichier, console, BD métier, exception), et autre SCOPEDLOG. (Le sujet avait déjà été abordé, tu devrais en retrouver des traces si tu cherches ici depuis google (-> log "boost::format" C++ site:developpez.net) -- la recherche avancée n'étant pas très douée je trouve)
Bref, sinon, il y a une bibliothèque log2 en mode wanabe-boost. Elle est de John Torjo je crois. Je n'ai pas encore eu le temps de trop regarder comment elle fonctionne, voire si elle répondrait pas tout simplement à mes besoins.
(J'avais vu tourner une encapsulation de log4cpp (/cxx?) avec du XML dans tous les sens, du grand n'importe quoi (le XML dans les logs).)
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
J'utilise la version 1 de la bibliothèque de Torjo, et elle répond assez bien à mes besoins. La version 2 m'avait semblé bien trop complexe à mettre en oeuvre, en échange d'une plus grande flexibilité que je ne comptais pas utiliser...
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.
j'utilise log4cpp, c'est pas la réponse à tout mais il est très facile de faire de nouveaux appenders/layouts pour l'étendre.
log4cpp largement modifié pour faire du context logging (les "outputs" ne sont plus liés aux loggers, mais au contexte du thread en cours).
Je me suis lance en fin d'annee derniere dans un gros (trop gros) projet d'evaluation de presque tout ce qui existait. J'ai passe en revu tout sourceforge, des libs C/C++, et meme Java, ...
Les plus avancees sont Log4cpp, Pantheios, la lib de John Torjo qui a ete refusee chez boost, et celle de ACE revient souvent aussi.
Il y a meme une tentative de developpement d'un standard effectuee par un groupe, et c'est aussi du grand n'importe quoi, puis qu'ils expliquent que devoir ajouter la balise fermante en fin de xml complique serieusement la generation de logs, et donnent comme solution d'accepter dans leur format xml que la balise root ne soit pas fermee, donc que ce ne soit pas un xml
Personnellement je n'aime pas log4cpp, beaucoup trop lourde a mon avis. Pour Java ils ont pas le choix,mais je pense qu'en C++ on peut faire beaucoup mieux et alleger enormement le code requis grace au preprocesseur. Bref, c'est une lib Java traduite en C++.
Mais il faut avouer que y'a pas grand chose d'autre. Pantheios se focalise sur les performances, mais je suis pas convaincu. C'est l'auteur de la STLSoft qui la developpe, il a ecrit un bouquin sur l'optimisation de chaines de caracteres etc... Mais bon, je vais pas detailler ici.
Je viens de tomber la dessus:
http://fastformat.sourceforge.net/
En fait je pense qu'il faut distinguer le type de log qu'on veut faire. Si c'est du log d'output a la apache, log4j est tres bien. Si c'est un log interne de debogage etc... c'est une autre histoire. Dans ce cas en particulier (c'est celui qui m'interesse perso), je ne suis pas persuade par l'interret de l'internationalisation, et autres fioritures du genre, comme dumper 64Ko de texte.
J'avais commence a coder une petite lib de demonstration dans le but de soumettre une nouvelle approche, que je n'ai vu nule part, et pourtant j'ai epluche plus de 50 projets sur sourceforge. En fait j'ai peut etre trouve une technique qui permet de loguer pour un cout CPU et meme memoire imbattables, + thread safe...Du coup ca remet en question les contraintes de base (cout eleve des operations de logging) et permet de designer l'API cliente autrement. Je voulais coder une petite lib de demo et soumettre ca aux pros pour savoir ce qu'ils en pensent, et peut etre provoquer de nouvelles idees.
J'ai pas mal reflechi a pas mal de points: les TLS, l'utilisation de canaux, de levels, du filtrage des outputs, de l'aspet non intrusif, ... et pense avoir une approche assez differente de l'existant. Si dans la sale y'en a qui ont pas mal reflechi a un design "ideal" de lib de log et son interesses a echanger des idees et coder un petit truc, qu'ils me contactent![]()
Partager