2010-04-28 8 views
33

Soy algo nuevo en la pila .NET y me preguntaba si existe un equivalente a slf4j para la plataforma .NET. Para mí, iniciar sesión en una Fachada y poder intercambiar las implementaciones de registro según sea necesario solo tiene sentido. Además, las API de envoltura disponibles en slf4j me han ahorrado muchas veces cuando necesitaba usar una biblioteca de terceros que estaba codificada contra un único marco de registro que no estaba usando.¿Hay una fachada de registro para .NET World?

¿Existe algún proyecto que actúe como fachada entre los registradores como log4net, nLog y Enterprise Library? ¿Hay envoltorios que me permiten atajar llamadas a esas bibliotecas y dirigirlas a otra biblioteca? ¿Debo comenzar un proyecto de código abierto para hacer esto yo mismo? ¿Esta pregunta es un duplicado porque no sé la manera correcta de preguntar? Por el contrario, ¿la forma más común de hacer esto es mediante el uso de orientación orientado a los aspectos?

+0

Buena pregunta: también tengo este problema. Me llevó unos minutos implementar una interfaz ILog e implementación para mi nLog favorito. Vamos a crear un proyecto de sistema operativo: me uniría :) – twk

+1

Hecho ya. Vea a continuación el enlace al registro común para .NET. –

+3

También hay un SLF para .NET: http://slf.codeplex.com/, basado en el slf4j. – Steven

Respuesta

18

Excusa Utilicé esto y olvidé que no era la versión de Apache. En realidad, es de código abierto y parte de un proyecto llamado infraestructura común. También se llama common logging. Funciona con MS Enterprise, log4net y otros. Funciona bien.

+3

Sí, Common Logging es LA fachada de registro para .NET – Steven

+0

@Steven: Es cierto, pero está desactualizado, desafortunadamente. – abatishchev

+0

Incluso aconsejaría contra el uso de fachadas de tala. La inyección adecuada de la dependencia elimina el uso de cualquier fachada de registro. – Steven

10

Eche un vistazo a Castle Windsor Logging Facility.

El código base es here. Adaptador Log4net here. Adaptador NLog here.

Se agregó el adaptador para Serilog.

Sin los adaptadores, hay soporte para ConsoleLogger, DiagnosticsLogger, StreamLogger y NullLogger.

Es bastante fácil escribir adaptadores en cualquier otro marco de trabajo.

+1

Castle.Services.Logging parece haber desaparecido. Obteniendo un 404 – Sam7

+0

@ Sam7 no, solo cambian los enlaces. Cada vez que encuentres algo como esto, considera buscar en Google un poco para encontrar los nuevos enlaces (como acabo de hacer), luego envía una sugerencia a la respuesta. ¡Gracias! –

4

Tuve el mismo problema. Después de pasar por encima de los recomendados, descubrí Ninject.Extensions.Logging

Cuál es grande ya que una fachada hace mejor sentido en combinación con DI todos modos

Viene con proxies para Nlog, NLog2 & log4net.

Aquí es un buen ejemplo de cómo utilizarlo en combinación con Nlog: http://blog.tonysneed.com/2011/10/09/using-nlog-with-dependency-injection/

entiendo, que esta cuestión es ya un par de años, pero debido a la integridad de los demás usuarios, todavía optó por publicar esta 'Solución'

3

Dado que esto fue escrito, apareció otro contenedor de registro interesante llamado Fody.Anotar. A partir de hoy, es probablemente el más completo de todos. La mayoría de los otros, pero Logging Facility, están bastante desactualizados y solo admiten los madereros más antiguos.

Tiene adaptadores para NLog, Log4Net, Serilog, CommongLogging, Catel, LibLog, MetroLog, NServiceBus y Splat, y le permite crear un adaptador para su propia biblioteca.

Puede usar Nuget para instalarlo. Busque los paquetes Anotar. *. Fody, por ejemplo Anotar.NLog.Fody.

+0

¿Adaptador para Common.Logging? Supongo que es un facadde en sí mismo. – nawfal

+0

@nawfal Sí, tienes razón, pero apuesto a que esta no es la primera vez que ves una capa de abstracción construida sobre otra capa de abstracción (y así sucesivamente). Es lo mismo que un loggint de biblioteca de registrador para otra biblioteca de registro, como el registro de Serilog para NLog o Log4Net o el registro de NLog para ELMAH. La pregunta debería ser si tiene sentido o no. – JotaBe

+0

Lo entiendo. Gracias.. – nawfal

0

De alguna manera encontré todas las soluciones aquí insatisfactorias, especialmente para bibliotecas/API. Aunque nunca pensé que lo haría, en realidad escribí un "registrador" de código abierto que debería manejar la mayoría de las preocupaciones.

Quizás pueda echarle un vistazo a Dapplo.Log, puede conseguirlo en NuGet.

La idea es utilizar Dapplo.Log en su biblioteca, y el proyecto que utiliza esto puede entonces dirigir (cuando sea necesario) cualquier salida de registro a su registrador de elección. Los ejemplos para dirigir el resultado se pueden encontrar en las pruebas, con implementaciones de algunos frameworks principales here.

Probablemente no sea perfecto (todavía), y doy la bienvenida a las solicitudes de extracción o las entradas.

Cuestiones relacionadas