2011-10-26 2 views
2

콘솔 응용 프로그램에서 log4net을 사용하고 있습니다.app.config에서 log4net Appender의 유형 이름을 매개 변수화 할 수 있습니까?

구성 파일 : 내 구성 파일은 내가 입력에서 파일 이름을 얻을 수 있도록

<appender name="CustomRollingFileAppender" type="MyApp.UTIL.CustomRollingFileAppender"> 
     <threshold value="ALL"/> 
     <param name="file" value=""/> 
     <param name="appendToFile" value="false"/> 
     <param name="maximumFileSize" value="20000KB"/> 
     <param name="maxSizeRollBackups" value="200"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%-5.5level] %logger - %message%newline"/> 
     </layout> 
</appender> 

무시 파일 매개 변수 :이 마법처럼 작동하고,하지만 난을 변경해야

namespace ConsoleApplicationTemplate.UTIL 
{ 
    public class CustomRollingFileAppender : log4net.Appender.RollingFileAppender 
    { 
     public override string File 
     { 
      get { return base.File; } 
      set 
      { 
       //Filename string taken as Input 
       base.File = Program.options.LogFile; 
      } 
     } 
    }  
} 

매개 변수 유형 태그 안에 첨부 자. 주변을 검색하여 구성 파일 내에서 속성을 사용할 수 있는지 확인했습니다. 그래서 나는 다음과 같은 내 설정 파일을 수정 한 :

<appender name="CustomRollingFileAppender" type="%property{ApplicationName}.UTIL.CustomRollingFileAppender"> 
     <threshold value="ALL"/> 
     <param name="file" value=""/> 
     <param name="appendToFile" value="false"/> 
     <param name="maximumFileSize" value="20000KB"/> 
     <param name="maxSizeRollBackups" value="200"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%-5.5level] %logger - %message%newline"/> 
     </layout> 
</appender> 

그리고 다음과 같은 나는 또한 속성 값을 변경해야

log4net.GlobalContext.Properties["ApplicationName"] = Assembly.GetExecutingAssembly().GetName().Name; 
private static log4net.ILog _logger = LogManager.GetLogger(typeof(Program)); 
log4net.Config.XmlConfigurator.Configure(); 

언제 아무튼있는 (나는 다음과 같은 오류가 구성 파일을 읽을 log4net 't은) 예외를 발생 :

log4net:ERROR Could not create Appender [CustomRollingFileAppender] of type [%property{ApplicationName}.UTIL.CustomRollingFileAppender]. Reported error follows. 
System.TypeLoadException: Could not load type [%property{ApplicationName}.UTIL.CustomRollingFileAppender]. Tried assembly [log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a] and all loaded assemblies 
    at log4net.Util.SystemInfo.GetTypeFromString(Assembly relativeAssembly, String typeName, Boolean throwOnError, Boolean ignoreCase) 
    at log4net.Util.SystemInfo.GetTypeFromString(String typeName, Boolean throwOnError, Boolean ignoreCase) 
    at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlEle 
    ment appenderElement) 
+0

type 속성이 매개 변수를 허용하지 않는다고 생각합니다. 그러나 나는 당신이 이것을 매개 변수화하기를 원하는 이유를 생각할 수 없다. 당신이 달성하고자하는 것을 명확히 할 수 있습니까? – Clafou

+0

log4net이 포함 된 Console Application Template을 만들고 싶기 때문에이 매개 변수를 설정하고 싶습니다. –

+1

log4net 매개 변수화 대신 Visual Studio 템플릿 시스템을 사용하여 관련 이름을 구성 파일에 저장할 수 있습니까? – Clafou

답변

1

나는 답이없는 것으로 나타납니다 두려워 : 다른 log4net의 구성 요소 중 일부는 펜더 요소의 type 속성이 PA를 지원하지 않습니다 달리 rameters.

귀하의 질문에 대한 코멘트에서 언급했듯이, 달성하고자하는 것은 자체 log4net appender 유형을 제공하는 Visual Studio 프로젝트 템플릿을 만드는 것이므로 솔루션은 Visual Studio 템플릿 시스템을 사용하여 .config 파일의 관련 특성 값입니다.

관련 문제