2015-06-09 33 views
0

我正在調試我寫的自定義log4net Appender。我的設置使用此標準PatternLayout在我的配置文件:Log4net:爲什麼在RenderedMessage中忽略了模式佈局?

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout 

在我Append()方法實現,如果我叫RenderLoggingEvent()它返回格式正確的消息。但是,loggingEvent的Renderedmessage僅包含%message位。

RenderLoggingEvent()回報:

「2015-06-25 14:09:37382 [主線程] INFO MyConsole.Program [(空)] - 螺紋測試\ r \ n」 個

loggingEvent.RenderedMessage包含:

「主題測試」

這是如何RenderedMessage應該工作?

我需要在Appender之外呈現消息,所以我寧願不使用它的RenderLoggingEvent()方法。是否有更直接的方式從LoggingEvent實例獲取呈現的消息?

回答

1

你說你需要'將消息渲染到Appender之外',但是佈局與appender相關聯。

假設你可以解決這個並以某種方式來訪問佈局,那麼你可以調用Format method on the layout

PatternLayout layout = … ; 
string result; 
using (StringWriter writer = new StringWriter()) 
{ 
    layout.Format(writer, loggingEvent); 
    result = writer.ToString(); 
} 

測試輸出:

2015-06-25 14:06:43357 [ 14]錯誤測試[NDC] - 測試消息

+0

Thanks @stuartd。我不確定這是一種「更直接」的方式。 OTOH也許我可以通過調用loggingEvent.WriteRenderedMessage(writer)來做類似的事情。這樣我只依賴於loggingEvent。 – urig

+0

@urig除了日誌事件不知道appender上設置的佈局。 – stuartd