2011-10-21 4 views
1

동일한 주제에 대해 인터넷에 여러 게시물이 있으며 Windows Forms App에서 여러 로그 파일을 작성할 수도 있습니다. 하지만 제 요구 사항은 약간 다릅니다.Log4Net 및 다중 로그 파일

내 앱에는 "BuySomething"모드 & "SellSomeOtherThing"모드와 같이 두 가지 모드가 있습니다. 그리고 "BuySomething"모드에있을 때 Log_BuySomething.txt와 Log_SellSomeOtherThing.txt에 쓰기를 원합니다. 그렇지 않으면 한 모드가 선택됩니다.

app.config 파일에서 StackOverflow Question의 마지막 게시물과 동일한 구조를가집니다.
내 문제는 코드 XmlConfigurator.Configure();이 실행될 때 app.config 파일의 LogFileAppenders에 언급 된 이름의 빈 로그 파일을 생성한다는 것입니다. 나는 다음과 같은 코드를 해결할 것이라고 생각하지만,하지 않았다 :

if (mode == BuySomeThing) 
{ 
    logger = LogManager.GetLogger("LogFileAppender1"); 
} 
else 
{ 
    LogManager.GetLogger("LogFileAppender2"); 
} 
XmlConfigurator.Configure(); 

어떻게에만 해당 로그 파일이 응용 프로그램의 인스턴스 생성되어 있는지 확인 할 수 있습니까?

답변

1

당신을 이해한다면 앱이 모드를 전환하지 않습니다.

그렇다면 코드를 사용하면 두 파일이 모두 생성되지만 실제로는 하나만 쓰는 것으로 의심됩니다. 제로 바이트 파일 치우는 경우

당신이 뭔가를 시도 할 수 중요하다

log4net.GlobalContext.Properties["MyLogFileName"] = 
    (mode == BuySomeThing) ? "Log_BuySomething.txt" : "Log_SellSomeOtherThing.txt" ; 

XmlConfigurator.Configure(); 
또한 하나의 펜더가에 설정 파일을 변경하고이 속성을 사용하도록 지시 할 필요가

파일 이름, 예.

<appender name="FileAppender" type="log4net.Appender.FileAppender"> 
    <file type="log4net.Util.PatternString" value="Logfiles\%property{MyLogFileName}" /> 

    <appendToFile value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender> 

이렇게하면 결국 하나의 파일 만 생성됩니다. (이 예에서는 logfiles 폴더에 생성됩니다).

+0

완벽하게 작동합니다. 감사! – ViV

관련 문제