我想使用NLog将消息记录到现有的富文本框中。到目前为止,我使用了this answer中给出的代码方法,但我发现this codeplex issue解释了我如何使用配置。问题是,它不起作用,单独的富文本框窗口仍然打开。我的项目是WPF,窗口名称和控件名称在xaml中设置如下:
<Window x:Name="Main_Window" ...>
...
<DockPanel ...>
...
<RichTextBox x:Name="rtbLog" ... />
</DockPanel>
</Window>
它们在Nlog.config中使用,如下所示:
<target xsi:type="RichTextBox"
formName="Main_Window" controlName="rtbLog" ... />
所以,名字匹配。我在Window_Loaded
事件处理程序中设置了记录器:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
log = LogManager.GetCurrentClassLogger();
}
我做错了什么?
答案 0 :(得分:2)
RichTextBoxTarget
在WPF应用程序中无法正常工作,因为它只支持Winforms。
如果您查看获取配置表单的source code,您会看到:
protected override void InitializeTarget()
{
if (this.FormName == null)
{
this.FormName = "NLogForm" + Guid.NewGuid().ToString("N");
}
var openFormByName = Application.OpenForms[this.FormName];
//...
Application.OpenForms
method是Winforms查找和打开Windows / Forms的方式。
有人多次提出将WpfRichTextBox添加到核心NLog:
但是,唯一的选择是使用创建的社区WpfRichTextBoxTarget
,可以作为nuget包访问: