【问题标题】:Set NLog RichTextBox target in configuration在配置中设置 NLog RichTextBox 目标
【发布时间】:2014-08-01 15:28:23
【问题描述】:

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

我做错了什么?

【问题讨论】:

  • RichTextBoxTraget 仅支持 Winforms。因此,如果您尝试使用 WPF,它总是会显示一个带有 WinForms RichTextBox 的漂亮 WinForms 窗口。因此,您应该使用链接问题中的 Erwin 的答案:stackoverflow.com/a/7709872/872395 或使用此 nuget 包:nuget.org/packages/NLog.Wpf.RichTextBox 其中包含相同的代码
  • @nemesv 感谢您提供的信息。请给它一个答案,这样我就可以赏金给你,前提是没有其他人有更好的补充。

标签: c# wpf nlog


【解决方案1】:

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 的方式。

曾多次提议在核心NLog中添加一个WpfRichTextBox:

但是,唯一的选择是使用创建的社区WpfRichTextBoxTarget,它可以作为 nuget 包访问:

NLog WPF Rich Text Logger Target

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多