#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. Хорошо?