转自http://www.cnblogs.com/mrfangzheng/archive/2012/11/29/2795133.html,经测试可用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net.Appender;
using System.Windows.Forms;
using log4net.Core;
using log4net.Layout;
namespace UI
{
/// <summary>
/// Usage:
/// log4net.Config.BasicConfigurator.Configure();
/// var logPattern = "%date [%thread] %-5level %logger !%M - %message%newline";
/// var logAppender = new TextBoxBaseAppender()
/// {
/// TextBox = this.textBox2,
/// Layout = new PatternLayout(logPattern)
/// };
///
/// ((log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetLoggerRepository()).Root.AddAppender(logAppender);
/// </summary>
public class TextBoxBaseAppender : AppenderSkeleton
{
public TextBoxBase TextBox { get; set; }
public TextBoxBaseAppender()
{
}
protected override void Append(LoggingEvent loggingEvent)
{
if (this.TextBox == null)
{
return;
}
if(!this.TextBox.IsHandleCreated)
{
return;
}
if(this.TextBox.IsDisposed)
{
return;
}
var patternLayout = this.Layout as PatternLayout;
var str = string.Empty;
if (patternLayout != null)
{
str = patternLayout.Format(loggingEvent);
if (loggingEvent.ExceptionObject != null)
{
str += loggingEvent.ExceptionObject.ToString() + Environment.NewLine;
}
}
else
{
str = loggingEvent.LoggerName + "-" + loggingEvent.RenderedMessage + Environment.NewLine;
}
if (!this.TextBox.InvokeRequired)
{
this.TextBox.AppendText(str);
}
else
{
this.TextBox.BeginInvoke((MethodInvoker)delegate
{
if (!this.TextBox.IsHandleCreated)
{
return;
}
if (this.TextBox.IsDisposed)
{
return;
}
this.TextBox.AppendText(str);
});
}
}
}
}
测试代码:
var logPattern = "%date [%thread] %-5level %logger !%M - %message%newline";
var logAppender = new TextBoxBaseAppender()
{
TextBox = this.textBox1,
Layout = new PatternLayout(logPattern)
};
log4net.Config.BasicConfigurator.Configure(logAppender);
ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
log.Error("button2 clicked. - testbox msg.");