用于登录到文本框的log4net配置

本文关键字:log4net 配置 文本 登录 用于 | 更新日期: 2023-09-27 18:27:52

我在理解log4net formName和textBoxName元素的配置时遇到了困难。我一直在关注之前的一个问题

特别是,我正在尝试创建一个自定义用户控件,其中包含一个文本框,用作记录器

namespace foo {
    public partial class LoggingControl : UserControl, IAppender {
        private ILog _logger = LogManager.GetLogger(typeof(LoggingControl));
        public LoggingControl() {
            InitializeComponent();
        }
        public ILog Logger {
            get {
                return _logger;
            }
        }
        public string FormName {
            get;
            set;
        }
        public string TextBoxName {
            get;
           set;
        }
        public void DoAppend(log4net.Core.LoggingEvent loggingEvent) {
            textBox.AppendText(loggingEvent.MessageObject.ToString() + Environment.NewLine);
        }
        public void Close() {
        }
    }
}

在我的配置中,我有

<log4net>
    <appender name="Logger" type="foo.LoggingControl">
        <formName value="MainForm"/>    --- ###01
        <textBoxName value="textBox"/>  --- ###02
        <root>
            <level value="DEBUG">
                <appender-ref ref="textbox">
                </appender-ref>
            </level>
         </root>
    </appender>
</log4net>
  1. 设置为包含自定义控件的窗体的名称其中包含日志记录文本框
  2. 设置为自定义控件内文本框的名称

这不起作用,我错过了什么?

用于登录到文本框的log4net配置

使用SkeletonAppender时,您只需找到一种方法即可找到文本框:

public class TextBoxAppender : AppenderSkeleton
{
    protected override void Append(LoggingEvent loggingEvent)
    {
         TextBox tb = FindMyTextBox();
         tb.Text += RenderLoggingEvent(loggingEvent);
    }
    private TextBox FindMyTextBox(){
        //Get the textbox from your program and return it for logging
    }
}

另一种选择是公开具有属性更改事件的静态日志记录文本,并将其绑定到文本框中。

对于threadsafe,应该使用textBox.BeginInvoke而不是textBox.Invoke