2010-08-19 10 views
5

He estado usando Log4net durante varios meses, y creo un nuevo Registrador como una variable miembro para cada clase, así:Log4Net: ¿Cómo obtener Logger?

// Member variables 
private readonly ILog m_Logger = LogManager.GetLogger("MyClass"); 

Entonces invocar el registrador de cada método en la clase que los registros, al igual esto:

// Initialize 
m_Logger.Info("MyClass.MyMethod() invoked."); 
... 
m_Logger.Debug("MyClass.MyMethod() did something..."); 
... 
m_Logger.Info("MyClass.MyMethod() completed."); 

¿hay alguna razón para no usar este enfoque, o hay una mejor manera de configurar el registrador? Gracias por tu ayuda.

Respuesta

12

Su registrador probablemente debería ser estático, y se puede tomar ventaja de otras anulaciones, como el uso del tipo:

private static readonly ILog m_Logger = LogManager.GetLogger(typeof(MyClass)); 

Para un mejor rendimiento, también se debe comprobar el nivel de registro está antes de llamar a la función de registro apropiada. Por ejemplo:

if (m_Logger.IsDebugEnabled) { m_Logger.DebugFormat("Starting {0}", MethodBase.GetCurrentMethod().ToString()); } 

El ejemplo anterior también muestra el uso de la reflexión para obtener el nombre del método.

+0

'usando la reflexión para obtener el nombre del método' - pero no necesita pedirle a la reflexión que haga una caminata y consulte los metadatos del ensamblado para el nombre del método: simplemente lo tipeó en el archivo fuente –

+2

Es solo un ejemplo . El uso de la reflexión permite cortar y pegar fácilmente la línea en una multitud de lugares sin tener que editar la línea para el nombre del método correcto. – Russ

+0

¿Esto ya no lo hace seguro? –