Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以在app.config中参数化log4net Appender的类型名称吗?_C#_.net_Visual Studio_Logging_Log4net - Fatal编程技术网

C# 我可以在app.config中参数化log4net Appender的类型名称吗?

C# 我可以在app.config中参数化log4net Appender的类型名称吗?,c#,.net,visual-studio,logging,log4net,C#,.net,Visual Studio,Logging,Log4net,我在控制台应用程序中使用log4net。我的配置文件允许我从输入中获取文件名: 配置文件: <appender name="CustomRollingFileAppender" type="MyApp.UTIL.CustomRollingFileAppender"> <threshold value="ALL"/> <param name="file" value=""/> <param name="appendToF

我在控制台应用程序中使用log4net。我的配置文件允许我从输入中获取文件名:

配置文件:

<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>
这就像一个符咒,但我需要更改标记appender中的参数type。我四处搜索,发现我可以在配置文件中使用属性。因此,我修改了我的配置文件,如下所示:

<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读取配置文件时,我得到以下错误(不会引发异常):


恐怕答案是否定的:与其他一些log4net配置元素不同,appender元素的type属性不支持参数


正如在对您的问题的评论中所讨论的,由于您试图实现的是制作一个提供自己的log4net appender类型的Visual Studio项目模板,解决方案是使用Visual Studio模板系统在.config文件中写入相关属性值。

我认为type属性不允许使用参数。但是我想不出你为什么要把它参数化。你能澄清一下你想要实现什么吗?我想参数化这个,因为我想制作一个嵌入log4net的控制台应用程序模板。作为log4net参数化的替代方法,你能使用Visual Studio模板系统将相关名称放入配置文件吗?这也是一种方法。我必须深入研究VS2010模板,因为目前我对模板变量没有经验。@Clafou,你的两条评论似乎是一个答案。你应该发布这个建议。我同意这是不可能的。
log4net.GlobalContext.Properties["ApplicationName"] = Assembly.GetExecutingAssembly().GetName().Name;
private static log4net.ILog _logger = LogManager.GetLogger(typeof(Program));
log4net.Config.XmlConfigurator.Configure();
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)