2009-08-03 24 views
9

Estoy ajustando los patrones & prácticas Enterprise Library Logging Application Block para una aplicación escrita en .NET.registrador Singleton, registrador estático, registrador de fábrica ... ¿cómo iniciar sesión?

Quiero ser capaz de crear una subclase de un registrador (es decir, para proporcionar un registro de dominio específico).

¿Cuál es la mejor manera de hacerlo?

Por ejemplo, tengo una clase Logger estática en este momento, pero esto no me permite especializarla para el registro específico del dominio.

Por ejemplo,

Log(MyDomainObj obj, string msg)

Respuesta

12

Salida NLog. Ellos usan este tipo de patrón:

private static Logger myDomainLogger = LogManager.GetCurrentClassLogger(); 

A continuación, puede especializar la salida en función de la clase que pertenece a myDomainLogger.

más detalle:

class MyDomain 
{ 
    private static Logger _logger = LogManager.GetCurrentClassLogger(); 

    private void SomeFunc() 
    { 
     _logger.Trace("this is a test"); 
    } 
} 

Luego, en su salida que se puede tener de salida "MyDomain.SomeFunc" como parte de la "esto es una prueba" mensaje.

5

También, pago log4net. Nunca encontré que el registro de EL sea tan flexible como log4net. Elegí log4net porque ya estaba familiarizado con el uso de log4j.

protected readonly log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

Hacerlo de esta manera, puedo obtener los registros de esta manera:

2009-07-15 09: 48: 51,674 [4420] DEBUG SampleNamespace.SampleClass [(null)] - Mensaje de muestra que desea enviar

4

Incluso podría hacerlo mejor que eso. Escriba una clase contenedora que envuelva Nlog o log4net o lo que sea. A continuación, puede usar esa clase contenedora (tal vez usar una interfaz si realmente desea desacoplar elementos) en su código. De esta manera, si decides cambiar la clase de registrador, necesitas cambiar solo una clase y no editar todas tus clases.

+2

desde el punto de vista del diseño este es el camino a seguir. – Mantzas

+0

Ya hay envolturas disponibles como Common.Logging. – Onur

Cuestiones relacionadas