Quiero agregar el registro a una aplicación en la que estoy trabajando actualmente. He agregado el registro antes, eso no es un problema aquí.
Pero desde una perspectiva de diseño en un lenguaje orientado a objetos, ¿cuáles son las mejores prácticas para el registro que siguen OOP y patrones?
Nota: Actualmente estoy haciendo esto en C #, por lo que los ejemplos en C # son obviamente bienvenidos. También me gustaría ver ejemplos en Java y Ruby.
Editar: estoy usando log4net. Simplemente no sé cuál es la mejor manera de enchufarlo.
fuente
Como estás haciendo esto en C #, te recomendaría que mires NLog y ElMAH. Se pueden instalar MUY fácilmente usando NUGET. He puesto algunos enlaces a los siguientes para que pueda obtener más información.
fuente
Personalmente, tomo el marco de registro de elección (en mi caso, Entlib porque trabajo con .NET) y escribo un aspecto AOP para el registro.
Luego puede atribuir cualquier método / propiedades / clases / espacios de nombres y agregarles registros sin saturar la fuente.
fuente
El sistema en el que estoy trabajando actualmente utiliza una arquitectura y mensajes dirigidos por eventos, de modo que la mayoría de las acciones en nuestro sistema son el resultado de un comando y resultan en eventos (como clases DTO que se envían, en lugar de un evento delegado estándar). Adjuntamos controladores de eventos cuyo único propósito es manejar el registro. Este diseño nos ayuda a no repetirnos y a no tener que modificar el código existente para agregar / cambiar la funcionalidad.
Aquí hay un ejemplo de una de esas clases de registro, que maneja todos los eventos que se registrarán desde una sección estrecha de nuestra aplicación (aquellos relacionados con una fuente de contenido particular desde la que importamos).
No diré necesariamente que esta es una práctica recomendada, ya que parece cambiar de opinión sobre qué y cómo registrar a menudo, y cada vez que necesito usar un registro para diagnosticar un problema, inevitablemente encuentro formas de mejorar el registro. Información que registro.
Sin embargo, diré que registrar la información pertinente (especialmente en una forma de búsqueda Ctrl-F / find) es la parte más importante.
La segunda parte más importante es alejar el código de registro de su lógica principal: puede hacer que un método sea feo, largo y complicado muy rápidamente.
fuente
Como han dicho otros, el uso
log4j
o lalog4net
o algún otro marco de registro bien construido.Realmente no me gusta que el código de registro se interponga en el camino de la lógica empresarial. Por eso lo uso
Log4PostSharp
. Eso significa que puedo usar la Programación Orientada a Aspectos para anotar métodos como este:O cada método en un ensamblaje como este:
fuente
No estoy seguro de si algún marco hace esto, pero desde una perspectiva de diseño, modelaría que la información debe registrarse principalmente en tres categorías:
Para las dos primeras categorías, mi marco de registro ideal debería manejarlas como un proceso posterior a la compilación y transparente para los desarrolladores. Sería bueno agregar declarativamente el registro a los ensamblados, algo como lo siguiente:
Para la tercera categoría, los programadores pueden simplemente crear uno o más métodos de "registro" dedicados y aprovechar el rastreo para la primera categoría. Los métodos de registro no hacen más que servir un punto auxiliar al que se pueden aplicar las reglas de seguimiento.
fuente