2009-07-18 82 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