2009-07-18 29 views
15

Tôi muốn toàn quyền kiểm soát đầu ra x64 của log4net.Đầu ra log4net xml

Làm cách nào để tùy chỉnh mẫu đầu ra?

Trả lời

28

Như suggested bởi MrPeregrination bạn cần phải viết một lớp học bắt nguồn từ XmlLayoutBase, ghi đè lên các phương pháp FormatXml và hướng dẫn appender của bạn để sử dụng nó như bố trí:

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(); 
    } 
} 

Và trong app.config đặt này:

<?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> 

Điều này sẽ tạo các mục nhập như thế này trong tệp nhật ký của bạn:

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

Darin, cảm ơn bạn rất nhiều, cuối cùng nhận được để dưới cùng này, nhưng bạn có thể vui lòng cho tôi biết, tôi cần phải có layoutbase tùy chỉnh này trong thư viện lớp riêng của mình, trong thư viện lớp ứng dụng của tôi, hoặc trong thư viện lớp log4net)? –

+0

Bạn có thể có lớp này trong thư viện lớp của chính nó hoặc trong thư viện lớp ứng dụng của bạn. Nếu bạn có nó trong thư viện lớp riêng của nó, bạn cần phải chỉ định tên của hội đồng có chứa nó:

+0

Darin là bạn vẫn theo dõi câu hỏi này? –

3

Kiểm tra lớp XmlLayoutBase. Tôi nghĩ rằng đó có thể là những gì bạn cần. Có một hàm FormatXML, bạn sẽ cần ghi đè để cung cấp cho XmlWriter dữ liệu được định dạng chính xác.

+0

Tôi có thể chi tiết hơn một chút được không? –

Các vấn đề liên quan