gpt4 book ai didi

Log4Net - 我可以在 Config 中拥有自定义部分名称吗

转载 作者:行者123 更新时间:2023-12-02 13:46:31 26 4
gpt4 key购买 nike

我需要在配置部分使用除 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 使用不同的部分 anme,如 log2net

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

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

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

谁能帮忙。

最佳答案

我无法重现您遇到的异常,但查看其详细信息和 code of XmlHierarchyConfigurator class ,当根 xml 元素名称不是 log4net 时,会引发异常,而这正是您想要执行的操作。

您可以尝试做的是:

  1. 读取您的自定义log2net XmlElement
  2. 创建一个新的log4net XmlElement
  3. log2net 的所有子元素复制到新的 log4net 元素
  4. 执行传递新 log4net 元素的 XmlConfigurator.Configure() 方法。
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);

关于Log4Net - 我可以在 Config 中拥有自定义部分名称吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18906450/

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