log4net - Write log to WinForm TextBox

来源:互联网 发布:淘宝模特兼职价格 编辑:程序博客网 时间:2024/06/07 13:57

转自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.");



0 0
原创粉丝点击