如果你想在你的 应用程序的多个地方做日志记录,我宁愿采用下面的方法。这种方法可以灵活地通过代码动态地更改控制实例 。
TextBoxAppender
public class TextBoxAppender : AppenderSkeleton
{
public RichTextBox RichTextBox { get; set; }
protected override void Append(LoggingEvent loggingEvent)
{
Action operation =() => { this.RichTextBox.AppendText(RenderLoggingEvent(loggingEvent)); };
this.RichTextBox.Invoke(operation);
}
}
的代码分配的文本框实例。在开始执行日志记录的过程之前执行此操作。
var appender = LogManager.GetRepository().GetAppenders().Where(a => a.Name == "TextBoxAppender").FirstOrDefault();
if (appender != null)
((TextBoxAppender)appender).RichTextBox = this.richTextBoxLog;
配置
<log4net debug="false">
<appender name="TextBoxAppender" type="SecurityAudit.UI.TextBoxAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<priority value="DEBUG" />
<appender-ref ref="TextBoxAppender" />
</root>
</log4net>
在XML配置文件中,有一个名为PARAMS。你不能用这个来获取文本框的名称吗?然后使用:Control [] Items = Controls.Find(“textBoxLog4Net”,false);在运行时获得访问权限? –
但据我所知,Controls是Form的一个属性;那么问题就变成了appender应该引用哪个表单,或者appender如何从Xml文件中获取对Form对象的引用? – AllSolutions