I created my own Appender with log4net,
public class TextBoxAppender : AppenderSkeleton
{
...(constructor and other stuff omitted)...
protected override void Append(log4net.Core.LoggingEvent loggingEvent)
{
var msg = string.Concat(loggingEvent.RenderedMessage, "\r\n");
_textBox.AppendText(s);
}
}
My App.config has a PatternLayout which I would like to use,
<appender name="TextBoxAppender" type="log4netAppender.TextBoxAppender">
<root>
<level value="DEBUG">
<appender-ref ref="TextBoxAppender">
</appender-ref>
</level>
</root>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd MMM yyyy HH:mm:ss} %level - %message%newline%exception%newline" />
</layout>
</appender>
loggingEvent.RenderedMessage doesn't give me the string formatted with PatternLayout.
I saw AppendSkeleton has this signature
public virtual ILayout Layout { get; set; }
but I don't want to write my own Layout, i would like to use the "standard" one which other Appenders use...
Any idea anyone? Thanks a lot
TIP: maybe this way we can access the renderer of other existing loggers?
var hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.RendererMap .....
SOLUTION
in Append(), right before RenderLoggingEvent, set the Layout, which otherwise is null.
this.Layout = new log4net.Layout.PatternLayout("%date{dd MMM yyyy HH:mm:ss} %level - %message");
string msg = base.RenderLoggingEvent(loggingEvent);