Trabajo con std::cerr y std::clog
Separe los diagnósticos y los registros de la salida del programa mediante los streams cerr y clog.
Trabajo con std::cerr y std::clog es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
Tres streams de salida
La biblioteca estándar expone tres streams de salida predefinidos:
- std::cout — salida estándar con búfer
- std::cerr — error estándar sin búfer
- std::clog — error estándar con búfer
std::cerr: Errores y advertencias
std::cerr escribe en stderr y no utiliza búfer: la salida aparece inmediatamente, incluso si el programa falla justo después.
std::cerr << "Error: file not found\n";std::clog: Registros con búfer
std::clog también escribe en stderr, pero utiliza búfer, como cout. Utilícelo para registros rutinarios cuando una ligera latencia sea aceptable.
std::clog << "[info] processing record 42\n";¿Por qué hay dos flujos para stderr?
Los errores deben aparecer inmediatamente para que el usuario los vea antes de que ocurra un fallo. Los registros suelen tener un volumen elevado; almacenarlos en un búfer mantiene un rendimiento aceptable.
Redirigir la salida
En la línea de comandos, stdout y stderr se envían a canales separados. Rediríjalos de forma independiente.
# 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>&1Salida de diagnóstico frente a salida de datos
Por convención, los datos legibles por máquinas se envían a stdout y los diagnósticos para personas, a stderr. Esto permite que las canalizaciones funcionen correctamente.
Vincular flujos
cin está vinculado a cout de forma predeterminada: leer de cin vacía primero cout. cerr también está vinculado a cout.
Registro personalizado con niveles
Envuelva clog en funciones auxiliares para definir niveles de registro: INFO, WARN y ERROR. Así, los mensajes de registro mantienen un formato coherente.
void warn(const std::string& msg) {
std::clog << "[WARN] " << msg << "\n";
}
void error(const std::string& msg) {
std::cerr << "[ERROR] " << msg << "\n";
}Rendimiento: cerr es lento
Como cerr vacía el búfer en cada operación, las escrituras repetidas son lentas. Para un registro intensivo, prefiera clog o una biblioteca de registro específica.
Vaciar clog manualmente
Si desea que la salida de clog aparezca inmediatamente para depurar, vacíe el búfer manualmente.
std::clog << "checkpoint" << std::flush;Escribir en un flujo de archivo
Los mismos patrones funcionan con los flujos de archivo. Abra un archivo de registro con std::ofstream y escriba en él como lo haría con clog.
std::ofstream logFile("app.log");
logFile << "Application started\n";Comprobación rápida
¿Qué flujo estándar se vacía automáticamente después de cada escritura?
Resumen
Utilice std::cout para la salida normal, std::cerr para errores urgentes sin búfer y std::clog para registros con búfer. Rediríjalos de forma independiente en el shell con > y 2>.
Preguntas frecuentes
¿La lección «Trabajo con std::cerr y std::clog» es gratis?
Sí — el texto completo de «Trabajo con std::cerr y std::clog» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Trabajo con std::cerr y std::clog»?
Separe los diagnósticos y los registros de la salida del programa mediante los streams cerr y clog. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Trabajo con std::cerr y std::clog»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Uso adecuado de std::cin y std::cout
- Formateo de la salida con iomanip
- Lectura segura de la entrada con getline
- Trabajo con std::cerr y std::clog