2012-04-12 73 views
3

我遇到的問題是它只是將XML標記寫入文件,但它不是格式正確的XML文件。Log4Net可以附加到正確結構化的XML文檔嗎?

該文件只是被填充如下:

<LogEntry><Date>12/04/2012 11:16:26</Date><Message>An error message.</Message><StackTrace>..StackTrace omitted..</StackTrace></LogEntry> 
<LogEntry><Date>12/04/2012 11:21:27</Date><Message>Another error message.</Message><StackTrace>..StackTrace omitted..</StackTrace></LogEntry> 
<LogEntry><Date>12/04/2012 11:21:37</Date><Message>More messages.</Message><StackTrace>..StackTrace omitted..</StackTrace></LogEntry> 

有什麼辦法,我追加到一個正確的結構化的XML文檔?

理想的情況下,將顯示如下:

<?xml version="1.0" encoding="utf-8"?> 
<Logs> 
    <LogEntry><Date>12/04/2012 11:16:26</Date><Message>An error message.</Message><StackTrace>..StackTrace omitted..</StackTrace></LogEntry> 
    <LogEntry><Date>12/04/2012 11:21:27</Date><Message>Another error message.</Message><StackTrace>..StackTrace omitted..</StackTrace></LogEntry> 
    <LogEntry><Date>12/04/2012 11:21:37</Date><Message>More messages.</Message><StackTrace>..StackTrace omitted..</StackTrace></LogEntry> 
</Logs> 

我正在使用的代碼是:

public class MyXmlLayout : XmlLayoutBase 
{ 
    protected override void FormatXml(XmlWriter writer, LoggingEvent loggingEvent) 
    { 
     writer.WriteStartElement("LogEntry"); 

     writer.WriteStartElement("Date"); 
     writer.WriteString(loggingEvent.TimeStamp.ToString(CultureInfo.CurrentCulture)); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("Message"); 
     writer.WriteString(loggingEvent.RenderedMessage); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("StackTrace"); 
     writer.WriteString(loggingEvent.ExceptionObject.StackTrace); 
     writer.WriteEndElement(); 

     if (loggingEvent.ExceptionObject.InnerException != null) 
     { 
      writer.WriteStartElement("InnerException"); 
      writer.WriteString(loggingEvent.ExceptionObject.InnerException.ToString()); 
      writer.WriteEndElement(); 
     } 

     writer.WriteEndElement(); 
    } 
} 

,併爲這個配置是:

<log4net> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" > 
    <param name="File" value="Logs/log.xml" /> 
    <param name="AppendToFile" value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <layout type="MyNamespace.MyXmlLayout" /> 
    </appender> 

    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="LogFileAppender" /> 
    </root> 
</log4net> 

回答

5

XmlLayoutBase類不支持你在找什麼。原因很簡單:如果必須確保xml總是格式良好,那麼只要將條目添加到文件中就需要覆蓋最後的根節點。簡單地將xml片段附加到文件更容易,更快速。

相關問題