簡體   English   中英

用於登錄到文本框的log4net配置

[英]log4net configuration for logging to textbox

我在嘗試了解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. 設置為自定義控件內的文本框的名稱。

這不起作用,我想念什么?

使用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
    }
}

另一個選擇是公開具有屬性更改事件的靜態日志記錄文本,並將其綁定到文本框中的文本。

您應該使用textBox.BeginInvoke而不是textBox.Invoke來實現threadsafe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM