2010-05-04 17 views
14

Todo,registro en una biblioteca de C#

me pregunto cuál es la mejor práctica en relación con el registro dentro de una biblioteca. Estoy creando una biblioteca C# para ser utilizada por los usuarios y en algunos puntos quiero registrar un error o una advertencia. ¿Es una buena práctica usar log4net e iniciar sesión en un archivo?

Gracias,

M

Respuesta

9

La belleza de usar log4net es que su biblioteca no tiene que especificar el lugar donde se registra algo. El destino (apéndices de registro) de los mensajes de registro viene determinado por la configuración, que la aplicación especifica (generalmente en un archivo de configuración).

Así que sí, use log4net siguiendo sus patrones recomendados (un "registrador" único por clase) e informe a sus usuarios que su biblioteca usa log4net. Cualquier mensaje de registro que genere su código de biblioteca se enrutará según el consumers configuration (archivo, base de datos, consola, rastreo, etc.).

EDITAR: Aquí está a good short primer en log4net que explica los conceptos básicos.

+0

De hecho, como se mencionó en dpurrington, log4net le permite dejarlo en manos del consumidor de su biblioteca * donde * quiere iniciar sesión y los niveles de detalle, pero usted define * qué * está registrado. Debe asegurarse de que el registrador de raíz en su biblioteca sea público, de modo que se pueda acceder mediante ensamblajes externos. Vea aquí el problema que tuve: http://stackoverflow.com/questions/2159189/is-there-a-built-in-logging-framework-in-net – alimbada

1

log4net es solo una biblioteca de terceros, no es mejor práctica que debe usar eso como su biblioteca de registro cuando usa C#. Mi consejo es que el registro permanezca siempre en algún lugar (lo más común es que sea un archivo de texto). Sin embargo, también está el registro de eventos (requiere un poco de configuración adicional).

Tiendo a utilizar NLog que me parece muy fácil de usar y fácil de configurar. En cuanto a iniciar sesión dentro de las bibliotecas de la clase, su enfoque realmente sensato es el que mejor se adapta a su aplicación. Algunas personas crearían 1 registrador y lo pasarían a las clases, otros crearían un registrador por clase loggable. Tiendo a crear un registrador estático por clase y funciona bien.

+0

nlog no usa log4net de ninguna manera. –

+0

¡Sí, definitivamente no, no estoy seguro de por qué estaba allí! Una respuesta bastante antigua, probablemente una mala interpretación de cómo funcionaba NLog en aquel entonces. – James

+0

@james "Algunas personas crearían 1 registrador y lo pasarían a las clases ..." ¿Cómo? Constructor de clase? "... otros crearían un registrador separado por clase enchufable. Tiendo a crear un registrador estático por clase y funciona bien". ¿Cómo haces esto? ¿Cómo se asegura de que el código de llamada y la biblioteca escriban el mismo registro? – Howiecamp

19

Uso log4net en mi propia biblioteca, pero no haría esto si mi biblioteca debe ser utilizada por otros (es decir, fuera de mi organización). En ese caso, utilizaría una interfaz para el registro, proporcionaría una implementación predeterminada basada en log4net en un ensamblaje separado y usaría de una forma u otra para permitir a los usuarios de la biblioteca inyectar su propia implementación.

Habiendo dicho esto: me gusta mucho log4net y no usaría nada más, pero creo que es incorrecto obligar a otros a tener que usar el marco de trabajo de registro que prefiera.

Editar:

  • Yo también lo consideran una buena práctica tener el registro de la biblioteca en un archivo por defecto. Los usuarios de su biblioteca deberían poder decidir dónde terminan los mensajes de registro.
  • También proporcionaría una implementación "sin operación" que se puede usar si no se requiere ningún registro. Probablemente este sea el comportamiento predeterminado y no requiera ningún ensamblaje adicional o pasos para implementar.
+0

¿Has probado NLog también? ¿Cuál es su opinión sobre eso en contraste con log4net? – Juri

+0

No, no probé NLog, pero la respuesta sería la misma. Permita que el usuario de la biblioteca decida qué marco de registro usar. –

+0

Sí, claro. Está bien, pero en mi caso no tengo que externalizarlo, sino solo para uso interno. Solo me preguntaba si habías probado nlog también. Gracias – Juri

0

Depende de lo que quieras hacer.

¿Desea tener un mecanismo de registro para cosas técnicas puras que pueda activar/desactivar con una mayor verbosidad (para actividades de soporte)? ¿O desea registrar más material relacionado con el negocio que está destinado a ser leído por los usuarios de su biblioteca?

Debe responder a estas preguntas en primer lugar, a continuación, puede decidir sobre lo que entrar, dónde guardarlo, y cómo darle formato ...

En cualquier caso, log4net es un registro bueno, maduro y estable marco para todos estos propósitos. Y para iniciar sesión en un archivo continuo es una práctica común (pero de lejos no es la única opción ...).

Saludos Thomas

0

¿Cuáles son sus usuarios utilizan para el registro?
Esta es la pregunta que debe responder para determinar el marco correcto.
Log4net es potente y relativamente fácil desde mi punto de vista. También puede usarlo para iniciar sesión en un secuenciador si no se especifica nada más.

3

Práctica de tornillo de banco Una buena forma de hacerlo es introducir una fachada de registro, por lo que no le importa el registrador que utiliza, tiene una interfaz común constante para el registrador.

por ejemplo, podría probar this o simplemente escribir el suyo.

0

Yo uso SmartInspect.

Lo bueno de este programa es que puede filtrar los registros en la aplicación de visualización, una característica que es increíblemente útil en la práctica.

Para el registro, no estoy afiliado a SmartInspect de ninguna manera.

Cuestiones relacionadas