Sim*_*one 8 log4net constructor
我想将参数传递给自定义appender的构造函数,所以我想我必须覆盖Appenders的初始化机制.问题是我无法在文档中找到一种方法来连接它,这让我觉得它不可能(或者文档不完整).
对于版本1.2.10,如果不修改源代码,则无法做到这一点.相关部分位于Repository\Hierarchy\XmlHierarchyConfigurator.cs:L286:
IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true));
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它应该使用这个重载(或者那种方式)来让我实现我的需求.
Activator.CreateInstance(Type, Object[])
Run Code Online (Sandbox Code Playgroud)
我不确定我是否理解您的目标,但是如果您希望您的附加程序是可配置的,您基本上必须在您的附加程序上公开一个属性。然后,您可以通过编程方式或在配置文件中设置此属性。
UdpAppender 公开如下属性:
public int LocalPort
{
get; set;
}
Run Code Online (Sandbox Code Playgroud)
(实际上有点复杂,因为他们检查 setter 中的值是否是有效端口。)
在配置文件中,您可以像这样使用它:
<localPort value="8080" />
Run Code Online (Sandbox Code Playgroud)
这对于 string、int 等简单类型非常有效,但也适用于IPAddress. 如果您有自己的类型,那么使其工作会更加困难,我必须首先检查这是如何完成的。