2013-03-26 3 views
4

코드없이 log4net 구성 섹션의 구성 파일 섹션에서 키/값에 액세스 할 수 있는지 알고있는 사람이 있습니까?log4net 구성 섹션에서 appSettings 구성 값에 액세스

예를 들어

:

<appSettings> 
    <add key="Environment" value="DEV" /> 
    <!-- etc --> 
</appSettings> 
<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="${APPDATA}\MyApp\${Environment}\MyApp.log" /> 
    <!-- etc --> 
</log4net> 

이에 대한 모든 문서있을 것 같지 않기 때문에, 나는 모든 사람이 실패하면, 난 그냥에 "DEV"을 추가 할 것입니다 ...하지 희망 해요 appSettings 환경 변수와 함께 값을 대체하십시오. 사전에

감사합니다,

롭이 질문에 대한 내 대답을 보면

답변

1

감사합니다. @wageoghe에게 도움을주십시오. 결국, 난 그냥 (편의상)을 다시 설정 파일로 환경 값을 추가하기로 결정

<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="${APPDATA}\MyApp\DEV\MyApp.log" /> 
    <!-- etc --> 
</log4net> 
1

: 사용자 정의 PatterLayoutConverter의 예를 찾을 수

Custom log4net property PatternLayoutConverter (with index)

. 예제의 경우, 나는 그것을 : KeyLookupPatternConverter라고 불렀다.

의 편의를 위해, 여기있다 : 구성에서

//Log the "sessionid" and "userid" values from our "application settings" object 
    <layout type="log4net.Layout.PatternLayout"> 
    <param name="ConversionPattern" value="%d [%t] %-5p [session = %KLPC{sessionid}] [user = %KLPC{userid}] %m%n"/> 
    <converter> 
     <name value="KLPC" /> 
     <type value="Log4NetTest.KeyLookupPatternConverter" /> 
    </converter> 
    </layout> 

나는 폼의에서 설정 "KLPC"를 얻을 말하고 : 여기

namespace Log4NetTest 
{ 
    class KeyLookupPatternConverter : PatternLayoutConverter 
    { 
    protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent) 
    { 
     //Use the value in Option as a key into the "application settings" stored on the main form. 
     string setting; 
     if (Form1.AppSettings.TryGetValue(Option, out setting)) 
     { 
     writer.Write(setting); 
     } 
    } 
    } 
} 

그리고 당신이 그것을 구성하는 것이 방법이다 AppSettings.

귀하의 경우에는 구성 파일의 appSettings에서 값을 가져오고 싶습니다. 제공 한 예제를 수정하고 Form의 AppSettings에서 설정을 검색하는 코드를 코드로 대체하여 설정 파일의 응용 프로그램 설정에서 설정을 검색하는 것이 쉽습니다. 이 도로를 탈 경우

, 당신의 AppSettingPatternConverter은 다음과 같이 (안된) 보일 수 있습니다

class AppSettingsPatternConverter : PatternLayoutConverter 
    { 
    protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent) 
    { 
     //Use the value in Option as a key into the "application settings" stored on the main form. 
     string setting = ConfigurationManager.AppSettings[Option]; 
     if (string.IsNullOrWhitespace(setting)) 
     { 
     setting = string.Format("No setting value for key[{0}]", Option); 
     } 

     writer.Write(setting); 
    } 
    } 

당신이처럼 구성합니다 :

//Log the "Name" setting from the application settings object 
    <layout type="log4net.Layout.PatternLayout"> 
    <param name="ConversionPattern" value="%d [%t] %-5p [name = %AppSetting{Name}] %m%n"/> 
    <converter> 
     <name value="AppSetting" /> 
     <type value="Log4NetTest.AppSettingPatternConverter" /> 
    </converter> 
    </layout> 

당신은 당신이 그것을하고 싶은 말 코드를 작성하지 않고. 나는 할 수 있는지는 잘 모르겠지만, 위에 보여준 접근법을 사용하는 것은 꽤나 쉽고 매우 쉽습니다.

+0

원래 요청은 가변 데이터를 파일 스펙에 삽입하는 것이 었습니다. 패턴 레이아웃 변환기가 "ConversionPattern"외부에서 작동합니까?예를 들어, 파일 log4net 속성에서 작동합니까? – Tevya

1

당신은 파일 형식으로 log4net.Util.PatternString 작업 및 응용 프로그램 설정을 참조해야합니다 퍼센트의 appSetting를 사용하여 {설정}

아래

참조 코드 :

<appSettings> 
    <add key="Environment" value="DEV" /> 
    <!-- etc --> 
</appSettings> 
<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" 
     value="${APPDATA}\MyApp\%appSetting{Environment}\MyApp.log"/> 
    <!-- etc --> 
</log4net> 

희망이 여전히 도움이 :)

관련 문제