2013-09-19 3 views
6

Мне нужно использовать имя раздела, отличное от log4net, в разделе конфигурации. Я знаю, это то, что мы обычно используемLog4Net - Могу ли я иметь имя настраиваемого раздела в Config

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 

Но мне нужно, чтобы иметь раздел, как этот

<section name="log2net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 

Я работаю на веб-сайте Sitecore и он имеет свой собственный Sitecore.Logging DLL, которая также полученный из log4net. Таким образом, dll Sitecore Logging ссылается на раздел log4net в web.config

У нас есть наш пользовательский лог4net-приложение, которое работает только с log4net, а не с dll sitecore.logging. Поэтому я думал, что у меня могут быть два регистратора в моем проекте, sitecore.logger и log4net logger. Sitecore.logger использует раздел log4net, поэтому я хотел, чтобы log4net использовал другую секцию anme, такую ​​как log2net

Я попытался использовать приведенный ниже код, имея раздел log2net в config.

Но я получаю ошибку log4net: ERROR XmlHierarchyConfigurator: элемент Xml - это не элемент log4net.

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

Помогите пожалуйста.

ответ

4

Я не смог воспроизвести исключение, которое вы испытываете, но глядя на его детали и code of XmlHierarchyConfigurator class, исключение выдается, когда имя элемента корневого xml не равно log4net, и это именно то, что вы пытаетесь сделать ,

Что вы можете попытаться сделать, это:

  1. Прочитайте обычай log2netXmlElement
  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); 
+0

Спасибо Мараш –

+0

Я сожалею, я новичок в Stack обмен и требует 15 репутации голосовать. Но я очень благодарен вам –

+0

Если бы этот ответ помог вам, было бы целесообразно пересмотреть и пометить ответ как правильный - это будет полезно для других пользователей с аналогичной проблемой. –