2010-08-19 20 views
5

Ho usato Log4Net per diversi mesi, e creo un nuovo Logger come variabile membro per ogni classe, in questo modo:Log4Net: come ottenere il logger?

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

Poi invoco il registratore di ogni metodo nella classe che i registri, come this:

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

C'è qualche motivo per non utilizzare questo approccio, o c'è un modo migliore per impostare il logger? Grazie per l'aiuto.

risposta

12

tuo logger dovrebbe probabilmente essere statico, ed è possibile usufruire di altre sostituzioni, come l'utilizzo del tipo:

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

Per migliorare le prestazioni, si dovrebbe anche controllare il livello di registro ci si trova prima di chiamare il funzione di registro appropriata. Ad esempio:

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

L'esempio precedente mostra anche l'uso della riflessione per ottenere il nome del metodo.

+0

"usa la riflessione per ottenere il nome del metodo" - ma non è necessario chiedere la riflessione per eseguire una sovrapposizione e consultare i metadati dell'assieme per il nome del metodo: è stato semplicemente digitato nel file sorgente –

+2

È solo un esempio . L'uso della riflessione consente di tagliare e incollare semplicemente la linea su una moltitudine di punti senza dover modificare la linea per il nome del metodo corretto. – Russ

+0

Questo non lo rende più sicuro? –

Problemi correlati