Creando un archivo de log en C++
Cuando se está haciendo un programa es normal utilizar la salida estándar para ir poniendo mensajes de resultados parciales y pruebas para ver si las cosas están sucediendo como se esperan. Cuando el software que estamos creando alcanza mayor complejidad estos mensajes no son suficientes, es aquí donde entran los archivos de log. Esto son básicamente ficheros de texto que van guardando esto mensajes para luego poder analizarlos en profundidad.
Hay muchas maneras de crear un archivo de log algunas más complejas y con mas datos como hora, fehcas, colores, etc y otras mas sencillas. Aquí voy a mostrar una manera sencilla de crear uno de estos archivos utilizando las grandes herramientas de control de flujo de C++. Como no hay mucho más que explicar simplemente dejo el código.
#include <string> #include <fstream> int main() { // Declaramos las variables std::ofstream log; std::string log_file; // Creamos el archivo de log log_file.assign("log.txt"); log.open(log_file.c_str()); // Escribimos una línea con el nombre del archivo log << "LogFile: " << log_file << std::endl; // Escribimos en el log log << "Esta es una linea del log" << std::endl; // Cerramos el archivo log.close(); }
Como ves no es un log con mil pijerías pero es rápido y eficiente, podemos usar simplemente:
log << "Lo que quiera poner en el fichero";
Como lo haríamos con la salida estándar con cout.
El resultado sería un archivo log.txt con el siguiente contenido:
LogFile: log.txt Esta es una linea del log
Las herramientas de control de flujo de C++ que están en la biblioteca estándar son muy poderosas, en próximos artículos hablaremos más de ellas.
dónde se guarda el archivo log.txt?
En el directorio desde el que se ejecuta el programa.
Como hago para que no se sobre escriba el log.txt. ejm si ya tengo
LogFile: log.txt
Esta es una linea del log
y ahora quiero insertar otra fila con «ESTA ES OTRA FILA»
LogFile: log.txt
Esta es una linea del log
«ESTA ES OTRA FILA»
como hago para q innserte la 3ra fila ??????????????????????????
#include
#include
int main()
{
// Declaramos las variables
std::ofstream log;
std::string log_file;
// Creamos el archivo de log
log_file.assign(«log.txt»);
log.open(log_file.c_str());
// Escribimos una línea con el nombre del archivo
log << "LogFile: " << log_file << std::endl;
// Escribimos en el log
log << "Esta es una linea del log" << std::endl;
log << "Otra fila…" << std::endl;
// Cerramos el archivo
log.close();
}
A vale que te refieres después. Tendrás primero que leer el archivo de log, guardarlo en un string luego crear un nuevo arvhivo con el contenido de lo que tenías (el del string) y ya luego le añades lo que quieras.
Hola, si quieres agregar más logs al archivo sin perder lo que ya tienes cada vez que reinicies tu aplicación, puedes usar ios::app a la hora de abrir el archivo.
usando el ejemplo de la pagina seria:
log.open(log_file.c_str(),ios::app);De esta forma se irá agregando lo que escribas a lo que ya tenias en el archivo.
Revisa tambien:
http://www.programacionenc.net/index.php?option=com_content&view=article&id=69:manejo-de-archivos-en-c&catid=37:programacion-cc&Itemid=55
si quiero guardarlos en una ruta especifica, como podria hacerlo?
Hola, si quieres agregar más logs al archivo sin perder lo que ya tienes cada vez que reinicies tu aplicación, puedes usar ios::app a la hora de abrir el archivo.
usando el ejemplo de la pagina seria:
log.open(log_file.c_str(),ios::app);
De esta forma se irá agregando lo que escribas a lo que ya tenias en el archivo.
Revisa tambien:
http://www.programacionenc.net/index.php?option=com_content&view=article&id=69:manejo-de-archivos-en-c&catid=37:programacion-cc&Itemid=55
En cuanto a lo de guardar en una ruta específica solo tienes que dar la dirección del archivo junto con su nombre cuando se está asignando.
Recuerde usar » / » en lugar de » \ » de esta manera si tu archivo esta en documentos y usando el ejemplo de la página lo deberias asignar así:
log_file.assign(«C:/Users/PC-Name/Documents/log.txt»);
Esta muy interesante crear pero me gustaría saber como leer todo lo que esta dentro del archivo .log si me ayudan les agradecería un mundo