2013-02-18 3 views
1

두 개의 정수를 허용하는 함수가 있다고 가정 해 봅니다. 자동으로 지금까지 노력이 무엇이 "[Date][MethodNam]([first param],[second param]) - "일부 메서드에 전달 된 모든 매개 변수를 자동으로 기록합니다.

같은 메시지가 기록하는 방법입니다 - 다음의 레이아웃 패턴을 지정을 :

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] [%C.%M] – %message%newline" /> 

답변

2

Windsor와 같은 IoC 프레임 워크를 사용하는 경우 AOP (Aspect-oriented programming)를 사용하여 인터페이스에 래퍼를 삽입 할 수 있습니다. 그런 다음 메소드 호출을 기록 할 수 있습니다. 다음은 Windsor와 IInteceptor 인터페이스를 사용하는 예제입니다.이 인터페이스는 우리가 사용하는 스트라이프 다운 버전이지만 다양한 예제가 있습니다.

public class LoggingInterceptor : IInterceptor 
{ 
    public void Intercept(IInvocation invocation) 
    { 
     Type targetType = invocation.TargetType ?? invocation.Method.DeclaringType; 

     ILog logger = LogManager.GetLogger(targetType); 

     //Probably want to check logger.IsDebugEnabled 

     if(invocation.Arguments.Count() == 0) 
     { 
      logger.DebugFormat("Method '{0}' called.", invocation.Method); 
     } 
     else 
     { 
      var stringBuilder = new StringBuilder("{" + invocation.Arguments.Length + "}"); 

      for (int i = invocation.Arguments.Length - 1; i > 0; i--) 
      { 
       stringBuilder.Insert(0, "{" + i + "}, "); 
      } 

      logger.DebugFormat("Method '{0}' called with parameters: " + stringBuilder, new[] { invocation.Method }.Union(invocation.Arguments).ToArray()); 
     } 

     try 
     { 
      invocation.Proceed(); 

      if (invocation.Method.ReturnType != typeof(void)) 
      { 
       logger.DebugFormat("Method '{0}' returned: {1}", invocation.Method, invocation.ReturnValue); 
      } 
     } 
     catch(Exception ex) 
     { 
      logger.Error(string.Format("Method '{0}' threw exception:", invocation.Method), ex); 
      throw; 
     } 
    } 
} 

IoC 프레임 워크에 따라 개별 구성 요소를 연결할 수 있어야합니다.

POINT는 참고 :

이 아니라, 객체의 private 메소드를 연결할 수 없습니다 인터페이스 방법에 대한 작동합니다.

0

log4net하지만, 당신이 얻을 반사를 사용할 수 무슨 생각 런타임 데이터 또는 디버그 기능을 실행 한 다음 저장하십시오 (here).

0

Aspect Oriented Programming (AOP)이라고하는 번호 Here은 AOP 프레임 워크 목록입니다. 인수 로깅을 삽입 할 수 있는지 알 수 없지만 Loom.net이 유망 해 보입니다.

관련 문제