2012-04-26 4 views
0

현재 개발 또는 생산이라는 두 가지 환경에서 실행할 수있는 응용 프로그램을 개발 중입니다. 각각 서로 다른 로깅 인프라를 갖고 싶습니다.생산 및 개발 log4net 구성?

환경은 런타임에 내 .exe로 전달됩니다. 코드를 통해 각각의 애펜더를 활성화/비활성화 할 수 있습니까? 아래 설정에서 조정할 무언가가 있습니까?

this을 기반으로 각 키에 "prod"값과 "dev"값을 부여하는 응용 프로그램 설정의 app.config 파일에 다른 내용이 있으므로 두 개 이상의 구성 파일이 필요하지 않습니다.

<log4net> 

    <root> 
     <level value="debug" /> 
     <appender-ref ref="Dev" /> 
     <appender-ref ref="Prod" /> 
    </root> 

    <appender name="Dev" type="log4net.Appender.FileAppender"> 
     <file type="log4net.Util.PatternString" value="blabla 1" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <Header value="[Application Start]&#13;&#10;" /> 
     <Footer value="[Application Exit]&#13;&#10;" /> 
     <ConversionPattern value="%date (%property{ActiveStatus}) %-5level [%2thread] %-20.20logger{1} %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="Prod" type="log4net.Appender.FileAppender"> 
     <file type="log4net.Util.PatternString" value="blabla 2" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <Header value="[Application Start]&#13;&#10;" /> 
     <Footer value="[Application Exit]&#13;&#10;" /> 
     <ConversionPattern value="%date (%property{ActiveStatus}) %-5level [%2thread] %-20.20logger{1} %message%newline" /> 
     </layout> 
    </appender> 

</log4net> 
+0

을 그건 그렇고, 당신은 별도의 파일로 바로 물건을 이동할 수 있습니다. http://stackoverflow.com/a/445988/562906 – sinelaw

+0

런타임에 log4net 구성에 액세스하여 appender 컬렉션을 수정할 수 있습니다. – lnu

+0

어떻게 수행 할 수 있습니까? – Jerome

답변

6

당신은 당신이에 게시중인 환경에 따라 app.config 파일을 변환하고 조사 할 수 있습니다. 이 웹 응용 프로그램에서 매우 일반적이지만 다른 프로젝트 유형을 확장하는 방법을 설명하는 SO가 :

App.Config Transformation for projects which are not Web Projects in Visual Studio 2010?

+0

+1 app.config 변환 작업에 시간을 투자해야합니다. log4net 구성뿐만 아니라 dev에서 프로덕션 환경에 이르는 app.config의 모든 항목에 유용합니다. – wal

-1

태그 <threshold value="OFF"/>을 사용하고 번갈아 수정 하시겠습니까 ??

주석으로이 방법

<!-- <threshold value="OFF"/> --> 

당신이 로깅 내가 환경에 따라 별도의 구성 파일을 제안하고 실행 시간에 적절한 하나를로드 할

+0

downvote –

+2

에 대해서도 설명 드리겠습니다. 나는 downvoter가 아닙니다.이 답변은 (거의) 자동/자동 배포를 위해 작동하지 않으므로 분명히 바보 *입니다. 분명히 엔터프라이즈 솔루션이 아닙니다! 만약 당신이 당신 자신의 머신에 있고 닫힌 셋업을 구축한다면 이것은 괜찮을 것입니다. 그러나 모든 다른 시나리오에 대해서 이것은 ** 적절한 해결책이 아닙니다 **! –

2

를 활성화해야합니다. thsi 방식에서는 개발 특정 설정이 프로덕션 appender 등에 적용된 것처럼 가끔 오류를 유지하고 피하는 것이 더 쉬울 것입니다.

if (environment == "Production") 
{ 
    log4net.Config.Configure(Path.Combine(productionFolder, "log4net.config")); 
} 
+0

이것은 여전히 ​​'환경'변수/앱 설정이 prod 등의 dev에 임시로 오버라이드되는 것과 같은 문제를 일으킬 수 있습니다. – Dienekes

1

내가 SLL의 제안에 대한 투표는. 그러나, 당신은 펜더 중 하나를 비활성화 주장하는 경우 :

ILoggerRepository repository = log4net.LogManager.GetRepository(); 
var appender = repository.GetAppenders() 
    .Where(a => a.Name == "dev") 
    .Single(); 
appender.Close(); 
관련 문제