用于登录到文本框的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>
- 设置为包含自定义控件的窗体的名称其中包含日志记录文本框
- 设置为自定义控件内文本框的名称
这不起作用,我错过了什么?
使用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
。