我需要在config部分使用除log4net之外的部分名称。我知道这是我们通常使用的
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
但我需要这样的部分
<section name="log2net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
我正在使用sitecore网站,它有自己的Sitecore.Logging dll,它也来自log4net。因此,Sitecore Logging dll指的是web.config中的log4net部分
我们的自定义log4net appender仅适用于log4net,而不适用于sitecore.logging dll。所以我想我的项目中可以有两个记录器,sitecore.logger和log4net记录器。 Sitecore.logger使用log4net部分,所以我希望log4net使用不同的部分,如log2net
我尝试在config中使用log2net部分来使用以下代码。
但我收到错误log4net:ERROR XmlHierarchyConfigurator:Xml元素是 - 不是log4net元素。
XmlElement element = (XmlElement)ConfigurationManager.GetSection("log2net");
log4net.Config.XmlConfigurator.Configure(element);
任何人都可以帮忙。
答案 0 :(得分:4)
我无法重现您遇到的异常,但查看其详细信息和code of XmlHierarchyConfigurator
class时,如果根xml元素名称不是log4net
,则会引发异常,这正是你想做什么。
您可以尝试做的是:
log2net
XmlElement
log4net
XmlElement
log2net
的所有孩子复制到新的log4net
元素XmlConfigurator.Configure()
元素的log4net
方法。 XmlElement element = (XmlElement)ConfigurationManager.GetSection("log2net");
XmlElement newLog4net = element.OwnerDocument.CreateElement("log4net");
for (int i = 0; i < element.ChildNodes.Count; i++)
{
XmlNode child = element.ChildNodes[i];
newLog4net.AppendChild(child.CloneNode(true));
}
log4net.Config.XmlConfigurator.Configure(newLog4net);