7

我需要在配置部分使用除 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 附加程序,它仅适用于 log4net 而不适用于 sitecore.logging dll。所以我想我的项目中可以有两个记录器,sitecore.logger 和 log4net 记录器。Sitecore.logger 使用 log4net 部分,所以我希望 log4net 使用不同的部分,如 log2net

我尝试通过在配置中使用 log2net 部分来使用以下代码。

但我收到错误 log4net:ERROR XmlHierarchyConfigurator: Xml element is - not a log4net element。

 XmlElement element = (XmlElement)ConfigurationManager.GetSection("log2net");
        log4net.Config.XmlConfigurator.Configure(element); 

任何人都可以帮忙吗?

4

1 回答 1

5

我无法重现您遇到的异常,但查看它的详细信息和class代码,XmlHierarchyConfigurator当根 xml 元素名称不是时抛出异常log4net,这正是您想要做的。

您可以尝试做的是:

  1. 阅读您的自定义log2net XmlElement
  2. 创建一个新的log4net XmlElement
  3. 将你的所有子元素复制log2net到新log4net元素
  4. 执行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); 
于 2013-09-21T19:46:10.740 回答