2013-01-21 32 views
9

App.config trông như thế này:MemoryAppender PatternLayout không hiển thị?

<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level - %message" /> 
    </layout> 
</appender> 

Mã trông như thế này:

foreach (var ev in events) 
{ 
    string msg = ev.RenderedMessage; 
} 

Chuỗi trở về từ ev.RenderedMessagechỉ tin nhắn, không phải toàn bộ mẫu. Tôi cũng đã thử sử dụng WriteRenderedMessage với một số StringWriter và kết quả là như nhau. Có cách nào để nhận được thông báo với mẫu được áp dụng không?

Trả lời

13

tôi thấy nó :)

var events = _ma.GetEvents(); 
string result = ""; 
using (StringWriter writer = new StringWriter()) 
{ 
    foreach (var ev in events) 
    { 
     _ma.Layout.Format(writer, ev); 
     writer.Write(Environment.NewLine); 
    } 
    result = writer.ToString(); 
} 
+0

1.I đang tìm kiếm giải pháp này một thời gian, quan tâm chia sẻ như thế nào (hoặc nơi), bạn đã quản lý để tìm thấy nó? 2. Tôi đề nghị bạn sử dụng% n ở cuối mẫu chuyển đổi của bạn (cho dòng mới), theo cách đó bạn có thể tránh 'writer.Write (Environment.NewLine);' và có một mã chung hơn (nếu ai đó đã có% n mã hiện tại của bạn sẽ giảm xuống 2 dòng mỗi lần). – BornToCode