gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:52 24 4
gpt4 key购买 nike

我在控制台应用程序中使用 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>

覆盖文件参数:

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 内的参数 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: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)

最佳答案

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

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

关于c# - 我可以在 app.config 中参数化 log4net Appender 的类型名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com