【问题标题】:Log4Net - Can I have a custom section name in ConfigLog4Net - 我可以在 Config 中有一个自定义的部分名称吗
【发布时间】:2013-09-25 05:35:03
【问题描述】:

我需要在配置部分使用 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); 

谁能帮帮我。

【问题讨论】:

    标签: log4net sitecore log4net-configuration


    【解决方案1】:

    我无法重现您遇到的异常,但查看它的详细信息和 code of XmlHierarchyConfigurator class,当根 xml 元素名称不是 log4net 时抛出异常,这正是您的情况努力去做。

    你可以尝试做的是:

    1. 阅读您的自定义log2net XmlElement
    2. 新建一个log4netXmlElement
    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); 
    

    【讨论】:

    • 对不起,我是 Stack exchange 的新手,投票需要 15 声望。但我非常感谢你
    • 如果此答案对您有所帮助,那么点赞并将答案标记为正确是有意义的 - 这将对其他有类似问题的用户有益。
    猜你喜欢
    • 2010-10-22
    • 2017-04-15
    • 1970-01-01
    • 2011-12-15
    • 2022-01-18
    • 2023-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多