2017-07-11 80 views
0

我試着第一次使用Log4Net。將子節點追加到Log4Net的xml輸出

我創建了一個佈局類要在log4net的輸出使用:

public class MyXmlLayout : XmlLayoutBase 
{ 
    protected override void FormatXml(XmlWriter writer, LoggingEvent loggingEvent) 
    { 
      writer.WriteStartElement("LogEntry"); 
      writer.WriteAttributeString("id", loggingEvent.ThreadName); 
      writer.WriteStartElement(loggingEvent.MessageObject.ToString()); 
      writer.WriteString(loggingEvent.LoggerName); 
      writer.WriteEndElement(); 
      writer.WriteEndElement(); 
    } 
} 

我想有一個輸出如下所示:

<LogEntry id=1> 
    <Begin>MethodName</Begin> 
    <ExecutionTimeInSec>3473784</ExecutionTimeInSec> 
    <End>MethodName</End> 
</Logentry> 

但所有我得到如下:

<LogEntry id=1><Begin>MethodName</Begin></LogEntry> 
    <LogEntry id=1><ExecutionTimeInSec>3473784</ExecutionTimeInSec></LogEntry> 
    <LogEntry id=1><End>MethodName</End></LogEntry> 

我試圖加載的XmlDocument,但它說,它正被另一個過程,我理解的是正在使用的log4net目前

是有沒有辦法來檢查是否有特定ID LogEntry節點添加其他節點之前存在?

回答

0

我不知道你想要什麼,輸出不適合你的代碼,你想要的輸出也不會與你的代碼對應。有一些改進,讓你開始:

loggingEvent.MessageObject.ToString()不應該被用來獲取信息,使用:loggingEvent.RenderedMessage

至於我可以看你有沒有檢查您的代碼甚至配置爲在您的配置中運行。請看看這個博客帖子,讓你開始配置和如何使用XmlLayoutBase:

log4net-rollingfileappender-with-xml