2010-08-19 5 views
5

나는 몇 달 동안 Log4Net을 사용하고, 나는 다음과 같이 각 클래스의 멤버 변수로 새로운 로거를 만듭니다Log4Net : 로거를 얻는 방법?

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

은 그럼 클래스의 각 메소드에서 로거를 호출하는 로그와 같은 이 :

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

이 방법을 사용하지 않는 어떤 이유가 있나요, 또는 로거를 설정하는 더 좋은 방법이 있나요? 당신의 도움을 주셔서 감사합니다.

답변

12

로거는 아마 정적해야하고, 당신이 그런 종류 사용하는 등 다른 재정, 활용할 수 있습니다 : 성능 향상을 위해

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

을, 당신은 또한 당신이를 호출하기 전에에 로그 수준을 확인해야합니다 적절한 로그 기능. 예 :

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

위 예제는 리플렉션을 사용하여 메소드 이름을 가져 오는 것을 보여줍니다.

+0

'리플렉션을 사용하여 메소드 이름 가져 오기'-하지만 스택 워크를 수행하고 메소드 이름에 대한 어셈블리 메타 데이터를 참조하려면 반사를 요청할 필요가 없습니다. 소스 파일에 방금 입력했습니다. –

+2

예일뿐입니다. . 리플렉션을 사용하면 올바른 메소드 이름에 대한 행을 편집 할 필요없이 여러 곳으로 간단하게 잘라내어 붙여 넣을 수 있습니다. – Russ

+0

더 이상 스레드 세이프가되지 않습니까? –

관련 문제