[C con Clase] Logueo de errores...

Steven Davidson srd4121 en njit.edu
Vie Ago 13 10:03:53 CEST 2010


Hola Gilberto,

Gilberto Cuba Ricardo wrote:
> Hola Lista,
> 
>   Ante todo una disculpa por el OFF-TOPIC, pero como a mi entender
>   todos aquí somos programadores, o por lo menos tratamos, nos servirá
>   a todos el tener en cuenta este tipo de elemento a la hora de
>   elaborar una aplicación "seria".
> 

No pienso que el tema se considere "fuera de lugar"; de hecho, pienso 
que es apropiado para el tema general de la informática.

>   El asunto es que se me ha metido en la cabeza tratar de cazar los
>   errores que pudiera dar mi aplicación cuando ha tenido un mal
>   funcionamiento y se ha cerrado de manera inesperada o algo pasó y
>   dejó de ejecutarse. La idea sería que cuando sucede esto, tenga una
>   salida elegante y no brusca (dentro de lo posible), y poder loguear

Acabas de describir las razones por la implementación del sistema de 
excepciones en C++. Sugiero que eches un vistazo a ello. Puedes 
consultar el capítulo 43 de nuestro curso de C++: 
http://c.conclase.net/curso/index.php?cap=043#inicio

>   dónde fue que se produjo el error y demás cosas, como si fuera un
>   volcado hacia archivo del estado interno de la aplicación antes de
>   cerrarse. Esto lo he visto que lo hacen muchas aplicaciones, incluso
>   el propio Windows, así que me parece que no es algo de otro mundo,
>   es lograble.
> 
>   Por lo que mi pregunta gira en torno a si alguno tiene alguna idea
>   de como desarrollar esto, o si lo ha hecho, que por favor nos de la
>   pista de por donde se debe seguir, o sino, de cómo pudieramos
>   encausar las búsquedas para encontrar información de este tipo en la
>   internet.
> 

En cuanto a la bitácora, simplemente crea un fichero al principio y ve 
agregando mensajes al final del fichero. Sugiero abrir el fichero en 
modo de "agregado al final". Por ejemplo,

ofstream ofsBitacora( "error.log", ios::app );
...
ofsBitacora << "Error: " << szError[n] << ';' << Fecha_Actual() << endl;

Otra solución es abrir el fichero, agregar el mensaje a ello, y cerrarlo 
cada vez que quieras escribir un mensaje. Esto requiere más tiempo de 
ejecución, pero al menos podemos asegurarnos de que el fichero contenga 
los mensajes que vamos escribiendo; por si acaso, ocurre algo 
catastrófico y el fichero no se puede cerrar correctamente.


Espero que esto te oriente.

Steven





Más información sobre la lista de distribución Cconclase