Мне нужно войти в формате XML с использованием log4net - PullRequest
2 голосов
/ 18 апреля 2011

Я использую log4net для регистрации.Я пытаюсь войти в формате XML.Я также пытаюсь регистрировать настраиваемые поля.

Я расширил класс XmlLayoutBase, а в FormatXml (writer, loggingEvent) я могу написать собственные поля.Но вот проблема: он не создает правильно сформированный xml-файл. Он не добавляется в указанный узел (не могу сделать это с помощью XmlTextWriter)

Что я сделал до сих пор: я расширил RollingFileAppender и переопределил виртуальную функцию OpenFileЯ могу добавить необходимые родительские узлы сейчас, но регистрация добавляется в конце и не может найти способ добавить их под конкретным родительским узлом в xml

public class CustomRollingFileAppender:RollingFileAppender
{

 protected override void OpenFile(string fileName, bool append)
 {
  bool needToWrite = System.IO.File.Exists(fileName);
  base.OpenFile(fileName, append);
  lock (this)
  {
    if (needToWrite == false)
     {
      using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileName))
      {
       file.WriteLine(<System >);
       file.WriteLine(<LogParent >);
       file.WriteLine(</LogParent>);
       file.WriteLine(</System>);
     }
    }
  }
 }
}

, используя приведенный выше фрагмент, который я могу добавитьзаголовок и другая необходимая информация в моем XML-файле.Теперь мой xml выглядит следующим образом

<System CreationDate='4/18/2011 6:30:41 PM'>
<ParentLog TimeStamp='2010-07-01T11:01:58'>
// logs should appear here as children of <ParentLog> 
</ParentLog>
</System>

Далее я расширил XmlLayoutBase, как показано ниже

public class CustomXMLLayout: XmlLayoutBase
{
 protected override void FormatXml(System.Xml.XmlWriter writer,log4net.Core.LoggingEvent loggingEvent)
{
 System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(@"example.xml");

 writer.WriteStartElement("Log");
 writer.WriteAttributeString("TimeStamp", DateTime.Now.ToString());

 writer.WriteEndElement();

}

}

// записи написаны правильно (извините за запись), но в конце очевиднопричина.Мои вопросы: есть ли способ прикрепить xsd вдоль log4net, чтобы сообщить ему, где делать записи в журнале или, альтернативно, каким-либо образом назначить xsd XMLWriter?Я не смогу использовать xmldocument

Любая помощь приветствуется.

С уважением, sumit

1 Ответ

2 голосов
/ 16 июня 2011

Если вы не удовлетворены встроенным шаблоном XMLLayout и использованием Контексты для «пользовательских» полей, то вы не хотите использовать log4netсделать это.Вы хотите создать объектную модель, обновить ее свойства и сериализовать ее в XML.затем вы можете записать этот поток XML, используя средства добавления файлов в log4net.Хорошо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...