Мне нужно войти в формате xml при использовании log4net

#xml #log4net

#xml #log4net

Вопрос:

Я использую 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>
  

Затем я расширил базу XML-файлов, как показано ниже

 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:

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