2009-07-18 79 views

回答

28

由於suggested通過MrPeregrination你需要寫一個類從XmlLayoutBase派生,重寫FormatXml方法,並指示您的appender使用它作爲佈局:

class Program 
{ 
    static void Main(string[] args) 
    { 
     XmlConfigurator.Configure(); 
     ILog log = log4net.LogManager.GetLogger(typeof(Program)); 
     log.Debug("Hello world"); 
    } 
} 

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

而且在app.config中把這個:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 
    </configSections> 

    <log4net> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" > 
     <param name="File" value="log.txt" /> 
     <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> 
</configuration> 

這將產生這樣的條目在日誌文件中:

<LogEntry><Message>Hello world</Message></LogEntry> 
+0

達林,非常感謝你,終於到底了,但你能告訴我,我是否需要在自己的類庫,應用程序類庫或log4net類庫中重新定製這個自定義佈局庫(重新編譯)? – 2009-07-18 15:50:58

3

查看XmlLayoutBase類。我認爲這可能是你需要的。有一個FormatXML函數需要重寫,以向XmlWriter提供格式正確的數據。

+0

請問我有更多的細節嗎? – 2009-07-18 14:29:15