2012-02-11 2 views
0

내 C# 프로젝트에서 디버깅을 위해 log4net을 사용합니다. 그러나 Release 빌드의 경우 log4net에 대한 종속성을 제거해야합니다. 그것에 대해 올바른 방법이 무엇인지 확신 할 수 없습니다.릴리스 빌드에서 log4net에 대한 종속성을 제거하는 방법은 무엇입니까?

코드를 통해 #if DEBUG ... endif가 발생하는 것은 매우 번거롭고 디버그 또는 릴리스 모드에서 컴파일 할 때 수동으로 log4net에 참조를 추가/제거해야합니다.

내가 생각한 다른 옵션은 어떻게 든 릴리스 빌드의 모의 수업과 함께 "실제"lotg4net을 전환하는 것이지만, 어떻게해야할지 모르겠다.

필자의 경우 릴리스 빌드에서 log4net 종속성을 제거하는 가장 좋은 방법은 무엇입니까?

+0

모의 테스트 용입니다. 생산 버전은 Inversion of Control 또는 Dependency Injection의 라인을 따라가는 경향이 있습니다. –

답변

3

M.Babcock의 대답에 따르면 : 당신은 의존성 반전 이후입니다. 의존성 주입 컨테이너를 사용하려면 이 필요하지는 않지만 로깅을 추상화해야합니다. 이 같은

뭔가 :

public interface ILog 
{ 
    void Trace(string message); 
    void Debug(string message); 
    void Error(string message); 
    // and whatever you need 
} 

그런 다음 당신은 다른 구현을 가지고 :

public class NullLog : ILog { ... } // does nothing --- all calls are empty 
public class Log4NetLog : ILog { ... } // initializes Log4Net and does logging 

그런 다음 주 진입 점으로 정적 클래스를 사용할 수 있습니다 : 이제

public static class Log 
{ 
    private ILog log = new NullLogger(); 

    public static void Assign(ILog log) 
    { 
     this.log = log; 
    } 

    public static void Debug(string message) 
    { 
     log.Debug(message); 
    } 

    // ...and other implementations... 
} 

당신이 시작 코드에서 이것을 연결해야합니다. 여기에서 당신은 용기를 사용하거나 조건부 컴파일 사용할 수 있습니다

#if DEBUG 
    Log.Assign(new Log4NetLogger); 
#endif 

이들은 폭 넓은 스트로크됩니다. http://shuttle.codeplex.com/

ILOG : http://shuttle.codeplex.com/SourceControl/changeset/view/c49f328edd17#Shuttle.Core%2fsource%2fShuttle.Core.Infrastructure%2fLogging%2fILog.cs

NullLog : http://shuttle.codeplex.com/SourceControl/changeset/view/c49f328edd17#Shuttle.Core%2fsource%2fShuttle.Core.Infrastructure%2fLogging%2fNullLog.cs

Log4NetLog : 도움이 http://shuttle.codeplex.com/SourceControl/changeset/view/c49f328edd17#Shuttle.Core%2fsource%2fShuttle.Core.Infrastructure.Log4Net%2fLog4NetLog.cs

희망 내 서비스 버스의 일환으로 일부 로깅 인프라 코드가 있습니다.

3

여기에는 의존성 주입이 가장 좋습니다. DI 컨테이너를 중간에 추가하여 로깅 라이브러리를 물리적 구현에서 추상화합니다 (로깅은 DI/IoC 및 AOP의 포스터 하위 중 하나입니다). 로깅 기본 설정을 릴리스 빌드에서 무시할 수있는 구성 설정으로 오프로드하십시오. 당신은 많은 두통을 덜어 줄 것입니다.

관련 문제