2008-09-27 25 views
15

Creo que me podría estar perdiendo el sentido de tener un marco de trabajo para su aplicación. En todas las aplicaciones pequeñas, siempre escribí una pequeña clase de "Registro" y simplemente paso los mensajes de registro a un método que se escribe en un archivo.¿Cuál es el punto de utilizar un marco de registro?

¿Cuál es el propósito de un marco de registro de terceros como log4net? ¿Es seguridad de hilo con las operaciones de escritura de registro o me falta algo?

Respuesta

18

Esa es una excelente pregunta.

La primera razón es "¿por qué no?" Si está utilizando un marco de trabajo de registro, obtendrá los beneficios de mantenimiento de usar algo que ya está empaquetado.

La segunda razón es que el registro es sutil.Diferentes hilos, sesiones, clases e instancias de objetos pueden entrar en juego en el registro, y no quiere tener que resolver este problema sobre la marcha.

La tercera razón es que puede encontrar un cuello de botella de rendimiento en su código. Averiguar que su código es lento porque está escribiendo en un archivo sin almacenamiento en búfer o su disco duro se ha quedado sin espacio en el disco porque el registrador no se desplaza y comprime archivos viejos puede ser un dolor en el cuello.

La cuarta razón es que es posible que desee agregar a syslog, o escribir en una base de datos, o en un socket, o en diferentes archivos. Los marcos tienen esta funcionalidad incorporada.

Pero en realidad, la primera respuesta es la mejor; hay muy poco beneficio para escribir uno propio, y un montón de inconvenientes.

3

es posible que desee cambiar a conectarse a una base de datos para algunos mensajes, o un sistema de alerta que las páginas de la persona pobre en el apoyo

Más importante, sin embargo, la mayoría de los marcos de registro le permiten especificar el nivel de registro de las diferentes clases de modo usted no necesita cortar un nuevo binario cada vez quieres más/menos el registro (que el registro detallado para el insecto que sólo vio en la producción)

Log4Net's site tiene más detalle

1

Dependiendo de qué tan inteligente su propia implementación del sistema de registro es.

En java, si desea heredar tipos de registro, etc., puede ser una gran molestia y prefiere una herramienta de terceros como Log4J. Supongo que hay cosas similares para C#. De forma similar, si desea determinar el nivel de registro desde la línea de comando.

Si solo desea enrutar todo su System.out y controlar si se imprimen cada vez que compila, su propio registrador funcionaría bien.

2

En una palabra: flexibilidad. Log4xxx le brinda la capacidad de realizar diferentes niveles de registro, registrar diferentes módulos de código en diferentes archivos, y puede confiar en que será confiable sin importar qué situación extraña le ocurra (lo que hará su registrador si el disco se queda sin espacio) ?)

2

Algo que los otros comentarios han omitido: si ya hay una biblioteca que hace lo que quiere, le ahorra tener que escribir el código.

Posiblemente estás jugando la semántica aquí: para mí, un "marco de registro" normalmente es poco más que una clase que escribe mensajes de registro a un archivo ... así que lo que he hecho es escribir su propio registro marco de referencia. Dado que lo ha hecho, obviamente hay algún punto en "utilizando un marco de trabajo de registro".

En última instancia, necesitará asegurarse de que maneja el registro concurrente correctamente (bloqueando el flujo de salida), puede iniciar sesión en un archivo, syslog, etc., puede hacer el registro de transferencia, y así sucesivamente. Puede ahorrarse ese esfuerzo utilizando el código bien probado de otra persona.

1

Los marcos de registro ofrecen flexibilidad y evitan que reinvente la rueda. Sé que es muy fácil agregarlo a un archivo en cualquier idioma moderno, pero ¿tiene el registrador de fabricación casera múltiples objetivos? ¿Puedes activar y desactivar el inicio de sesión en tiempo de ejecución? ¿Por qué arriesgar una rueda pinchada cuando estas ruedas están disponibles de forma gratuita?

+0

"brain-dead simple para anexar a un archivo" - vs multithread y especialmente multinúcleo donde los hilos realmente se ejecutan de manera simultánea? ETW de Microsoft ofrece por buffer de procesador ETW-entradas, que me parece que es la solución ideal. – pngaz