2010-01-18 15 views
10

Recientemente he estado haciendo un trabajo que ha sido bastante profundo, me preguntaba qué es lo que piensa que es mejor para iniciar sesión. ¿Es mejor que.Mejores prácticas para crear un escritor de registro para errores

A. Cada vez que quiero escribir en mi registro, abra el archivo, escribir en él luego cerrarlo de inmediato por lo que no hay ninguna posibilidad real de perder información en el caso de un fallo crítico o un accidente.

B. Ahorre periódicamente, tal vez después de que cada sección principal haya sido terminada , lo que significa que puedo reducir los errores donde están los errores.

¿Alguna otra sugerencia? No quiero abrir y guardar todo el día con el gran volumen de texto que necesito para grabar, pero no quiero perder mi granularidad de la información. Escribo en C++, lo siento por no haberlo mencionado antes.

Respuesta

5

Que yo sepa, es bastante común (¿obligatorio?) Que una descarga de flujo sea equivalente a guardar.

Es decir, cuando dicen:

file.flush(); 

Todo a la espera de ser escrito está escrito. Tenga en cuenta que std::endl; también llama al flush. Por lo tanto, déjalo abierto y simplemente enjuague después de un montón de información.

+0

Bueno, ya he escrito el registrador de texto básico, pero creo que en el futuro después de este proyecto usaré una biblioteca, así que gracias a las personas que dejaron esas bibliotecas para mí. – Craig

0

En los sistemas Unix, tiene algo llamado syslog (que, por cierto, es una llamada a la biblioteca, junto con openlog y closelog, y un servicio). En Windows, creo que está el registro de eventos, aunque no conozco la API para ese.

De todos modos, dado que syslog (y el registro de eventos en Windows) se registra a través de IPC (a veces incluso remotamente a través de la red), el proceso se desacopla y no se verá afectado por el bloqueo del programa. De esta forma, también perderá la responsabilidad de guardar el archivo en el servicio syslog. Tenga en cuenta que esto incluye cosas como logrotation y compresión de archivos de registro, además de darle la oportunidad de usar herramientas estandarizadas para evaluar dichos archivos de registro (por ejemplo, IDS).

Ahora, dicho esto, el bloqueo del sistema (falla de energía, o lo que sea) es una historia totalmente diferente, no sé si eso es su preocupación, si le gustaría elaborar un poco sobre qué tipo de sistema en el que está trabajando, podría ser más fácil sugerir algo más apropiado.

+0

Se trata de una gran cantidad de procesamiento de imágenes, que utiliza imágenes grandes de gran tamaño (3gb +) y que tiene múltiples procesos, divisiones, manipulaciones de submarinismo. Además de imágenes que se almacenan como archivos binarios grandes (principalmente datos de altura y longitud y latitud) y archivos de procesamiento de cadenas que tienen información sobre las imágenes. – Craig

2

La mejor solución es utilizar una biblioteca existente para eso. Hay muchas bibliotecas buenas, bien probadas y populares por ahí. Por lo general, le brindan toda la versatilidad que necesita y le ahorra el dolor de cabeza de la administración de archivos. Además, le permiten guardar sus registros en varios objetivos y no necesariamente en archivos. He utilizado Google Inicia Biblioteca y ACE:

ACE es una gran biblioteca y el registro es sólo una pequeña parte de ella, así que si necesitas sólo el registro, tal vez es no es una buena opción. De todos modos, no intente implementar el registro usted mismo, ahorre el esfuerzo por algo más útil; a menos que, por supuesto, tenga un interés específico en los motores de registro.

1

A. Cada vez que quiero escribir en mi registro , abra el archivo, a continuación, escribir en él cerrarla de inmediato por lo que no hay ninguna posibilidad real de perder información en el caso de una crítica error o bloqueo.

B. Guardar periódicamente, tal vez después de cada sección principal se ha terminado que significa que puedo reducir bajadas donde los errores son .

¿Alguna otra sugerencia?

Simplemente alargue su cerebro un poco más - se le ocurrirán muchas otras ideas. El problema es escribir que un registrador se puede hacer tan complejo como se desee: los madereros pueden convertirse en piezas completas de software por sí mismos.

Here es un artículo que me gustó bastante sobre el diseño de las clases de registrador. Echar un vistazo.

Si no está dispuesto/no tiene el ancho de banda para admitir la creación de un nuevo módulo para el registro, vaya a una biblioteca existente como otros ya han sugerido.

¿Cómo eliges la biblioteca correcta? Lo que realmente debería preocuparse es qué tipo de registros desea y la etapa de desarrollo en la que se encuentra. Ordene sus mensajes y vea si la biblioteca admite clasificarlos de manera clara y consistente. ¿Necesitas múltiples receptores para tus mensajes? ¿Su biblioteca apoya eso? Si su código está en producción, tendrá que preocuparse un poco más. ¿Necesita un sistema de registro transaccional? ¿Necesita atomicidad de las operaciones (y, por lo tanto, registros)? ¿Necesita la capacidad de deshacer los mensajes?

Espero que esto ayude.

Cuestiones relacionadas