Utiliser std::cerr et std::clog
Séparer les diagnostics et les journaux de la sortie du programme avec les flux cerr et clog
Utiliser std::cerr et std::clog est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Trois flux de sortie
La bibliothèque standard expose trois flux de sortie prédéfinis :
- std::cout — sortie standard mise en tampon
- std::cerr — erreur standard sans tampon
- std::clog — erreur standard mise en tampon
std::cerr : erreurs et avertissements
std::cerr écrit dans stderr et est sans tampon — la sortie apparaît immédiatement, même si le programme plante juste après.
std::cerr << "Error: file not found\n";std::clog : journaux avec tampon
std::clog écrit également dans stderr, mais utilise un tampon comme cout. Utilisez-le pour les journaux courants lorsque la légère latence est acceptable.
std::clog << "[info] processing record 42\n";Pourquoi deux flux vers stderr ?
Les erreurs doivent apparaître immédiatement afin que l'utilisateur les voie avant un plantage. Les journaux sont volumineux — les mettre en tampon permet de conserver des performances acceptables.
Rediriger la sortie
Sur la ligne de commande, stdout et stderr sont envoyés vers des canaux distincts. Redirigez-les indépendamment.
# Send stdout to a file, stderr to the terminal
./app > out.txt
# Send stderr to a file too
./app 2> err.txt
# Send both to one file
./app > all.txt 2>&1Sortie de diagnostic et sortie de données
Par convention, les données lisibles par une machine vont vers stdout, tandis que les diagnostics destinés aux humains vont vers stderr. Cela permet aux chaînes de traitement de fonctionner proprement.
Relier les flux entre eux
cin est lié à cout par défaut — une lecture depuis cin vide d'abord le tampon de cout. cerr est lié de la même manière à cout.
Journalisation personnalisée avec des niveaux
Encapsulez clog dans des fonctions utilitaires pour gérer les niveaux de journalisation — INFO, WARN, ERROR. Cela garantit la cohérence des messages de journal.
void warn(const std::string& msg) {
std::clog << "[WARN] " << msg << "\n";
}
void error(const std::string& msg) {
std::cerr << "[ERROR] " << msg << "\n";
}Performances : cerr est lent
Comme cerr vide son tampon à chaque opération, les écritures répétées sont lentes. Pour une journalisation intensive, préférez clog ou une bibliothèque de journalisation dédiée.
Vider manuellement le tampon de clog
Si vous souhaitez que la sortie de clog apparaisse immédiatement pour le débogage, videz manuellement son tampon.
std::clog << "checkpoint" << std::flush;Écrire dans un flux de fichier
Les mêmes approches fonctionnent avec les flux de fichiers. Ouvrez un fichier journal avec std::ofstream, puis écrivez-y comme avec clog.
std::ofstream logFile("app.log");
logFile << "Application started\n";Vérification rapide
Quel flux standard est automatiquement vidé après chaque écriture ?
Récapitulatif
Utilisez std::cout pour la sortie normale, std::cerr pour les erreurs urgentes sans tampon et std::clog pour les journaux avec tampon. Redirigez-les indépendamment dans l'interpréteur de commandes avec > et 2>.
Questions Fréquemment Posées
La leçon « Utiliser std::cerr et std::clog » est-elle gratuite ?
Oui — le texte complet de « Utiliser std::cerr et std::clog » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Utiliser std::cerr et std::clog » ?
Séparer les diagnostics et les journaux de la sortie du programme avec les flux cerr et clog Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Utiliser std::cerr et std::clog » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Bien utiliser std::cin et std::cout
- Formater la sortie avec iomanip
- Lire les entrées en toute sécurité avec getline
- Utiliser std::cerr et std::clog