2011-10-26 41 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。我搜索了四周,發現可以在配置文件中使用屬性。所以,我已經修改我的配置文件如下:

<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

我不認爲類型屬性允許參數。但我想不出爲什麼你會想要參數化這個原因。你能澄清你想達到的目標嗎? – Clafou

+0

我想參數化這個,因爲我想製作一個嵌入了log4net的控制檯應用程序模板。 –

+1

作爲log4net參數化的替代方案,是否可以使用Visual Studio模板系統將相關名稱放在配置文件中? – Clafou

回答

1

恐怕看來,答案是否定的:與其他一些log4net的配置元素,該元素添加器的類型屬性不支持PA rameters。

正如您對問題的評論所討論的那樣,因爲您試圖實現的是製作一個提供自己的log4net appender類型的Visual Studio項目模板,所以解決方案是使用Visual Studio模板系統來編寫.config文件中的相關屬性值。

相關問題