2011-10-26 6 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のとき、私は次のようなエラー(doesnのを取得します「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を埋め込んだコンソールアプリケーションテンプレートを作成したいので、これをパラメータ化したいと思います。 –

+1

log4netのパラメータ化の代わりに、Visual Studioテンプレートシステムを使用して関連ファイル名を設定ファイルに入れることができますか? – Clafou

答えて

1

を、私は答えは何であると思わない怖い:他のlog4netの設定要素の一部とは違って、アペンダの要素のtype属性は、PAをサポートしていません。ラマー。

あなたの質問に対するコメントで説明したように、達成しようとしているのは独自のlog4netアペンダタイプを提供するVisual Studioプロジェクトテンプレートを作成することなので、Visual Studioテンプレートシステムを使用して.configファイルの関連する属性値。

関連する問題