2011-11-20 3 views
1

Spring.NET의 로그 예외가 어떤 이유인지 알고 싶습니다. 이유는 무엇입니까? 두 가지 일반적인 시나리오를 발견했습니다.Log4net 또는 nlog를 사용하여 Spring.NET에서 예외를 기록하는 가장 좋은 방법

1. IThrowAdvice를 사용하십시오.

throws advice와 메소드 AfterThrowing에서 handle/log 예외를 생성했습니다.

namespace Aspects 
{ 
    public class ExLogThrowsAdvice : IThrowsAdvice 
    { 
     private ILog _logger; 

     public ExLogThrowsAdvice() 
     { 
      _logger = LogManager.GetLogger("Error_file"); 
     } 

     public void AfterThrowing(MethodInfo methodInfo, 
      Object []args, Object target, Exception exception) 
     { 
      _logger.Error(exception); 
     } 
    } 
} 

및 로깅 예 Log4net위한 구성하는 Common.Loggin의 API (Common Loggin API)를 사용한다.

<sectionGroup name="common"> 
    <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/> 
</sectionGroup> 

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
<log4net> 
    <appender name="ErrorFileAppender" 
       type="log4net.Appender.FileAppender"> 
     <file value="errors.txt"/> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
      <levelMin value="ERROR" /> 
      <levelMax value="FATAL" /> 
     </filter> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date%newline%username%newline[%thread] %message %newline"/> 
     </layout> 
    </appender> 

    <root> 
     <level value="ERROR"/> 
     <appender-ref ref="ErrorFileAppender"/> 
    </root> 
</log4net> 

마지막으로, businees 계층에서 개체에 대한 프록시를 만듭니다.

<!--ex log advice--> 
    <object id="theExLogAdvice" type="Aspects.ExLogThrowsAdvice, ExceptionLogging"/> 

    <!--auto proxy creator--> 
    <object type="Spring.Aop.Framework.AutoProxy.TypeNameAutoProxyCreator, Spring.Aop"> 
     <property name="TypeNames" value="Aspects*"/> 
     <property name="InterceptorNames"> 
      <list> 
       <value>theExLogAdvice</value> 
      </list> 
     </property> 
    </object> 

이것은 첫 번째 개념입니다. 내가 발견 한 두 번째는 Spring Aspect 라이브러리에서 예외 처리를 사용하는 것이다. Spring.NET

에서

2.Exception 측면은 내가 로그 예외 핸들러를 만들고 싶습니다이 핸들러는 Log4net 로거를 사용합니다. 예외

처리기 :

<object id="exLogHandler" 
     type="Spring.Aspects.Exceptions.LogExceptionHandler, Spring.Aop"> 
    <property name="LogName" value="???"/> 
    <property name="LogLevel" value="Error"/> 
</object> 

다음은 예외 핸들 조언이 핸들러를 사용 :

<object id="exLogAspect" 
     type="Spring.Aspects.Exceptions.ExceptionHandlerAdvice, Spring.Aop"> 
    <property name="ExceptionHandlerDictionary"> 
     <dictionary> 
      <entry key="log" ref="exLogHandler"/> 
     </dictionary> 
    </property> 

    <property name="ExceptionHandlers"> 
     <list> 
      <value>on exception name SomeException log 'Ex:' + #e</value> 
     </list> 
    </property> 

나는 두 번째 방법이 좋은 경우에 확실하지 않다. 어쩌면 어리 석다.

Log4net 로거를 사용하려면 LogExceptionHandler를 구성 할 수 있습니까?

답변

1

이 가장 좋은 경우인데 잘 모르겠지만 SimpleLoggingAdvice은 예외를 기록합니다. 또한 실행 시간, 메소드 인수 및 반환 값을 기록하도록 SimpleLoggingAdvice을 구성 할 수 있습니다. 물론, 당신은 여전히 ​​configure a proxy factorylogging에있는

<object name="loggingAdvice" type="Spring.Aspects.Logging.SimpleLoggingAdvice, Spring.Aop"> 
    <property name="LogUniqueIdentifier" value="true"/>    
    <property name="LogExecutionTime" value="true"/>    
    <property name="LogMethodArguments" value="true"/> 
    <property name="LogReturnValue"  value="true"/> 

    <property name="Separator"   value=";"/> 
    <property name="LogLevel"   value="Info"/> 


    <property name="HideProxyTypeNames" value="true"/> 
    <property name="UseDynamicLogger" value="true"/> 
</object> 

,하지만 당신은 이미 그렇게하는 방법을 알고 : 구성이 (from the docs)처럼 보인다.

관련 문제