在配置中设置NLog RichTextBox目标

时间:2014-08-01 15:28:23

标签: c# wpf nlog

我想使用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();
}

我做错了什么?

1 个答案:

答案 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包访问:

NLog WPF Rich Text Logger Target