5

下面是我的 NLog 配置,我想将日志加载到 Form1 中名为 rtMessage 的现有 RichTextBox 中,但 NLog 将创建一个新窗口,并将日志消息加载到 RichTextBox 中:

 <targets>
    <target xsi:type="RichTextBox" name="m" layout="${longdate}|${level:uppercase=true}|${logger}|${message}" 
            controlName="rtMessage" formName="Form1" />
  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="m" />
  </rules>

谢谢你。

4

5 回答 5

10

我想你可以在 NLog Codeplex 论坛上找到你的问题的答案,这里

如果您直接在表单static logger内的字段声明中初始化,实例将不存在,NLog 将继续为目标创建一个新表单。Form1Form1 RichTextBox

您需要做的是将初始化延迟logger到实例已经初始化的时间Form1,例如在Load事件处理程序中。

以下是 Codeplex 问题的功能代码摘录:

public partial class Form1 : Form
{
    private static Logger logger;// = LogManager.GetCurrentClassLogger();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        logger = LogManager.GetCurrentClassLogger();
    }
}

为避免不必要的重新初始化,您可能希望logger仅在尚未初始化时才进行初始化,即

    private void Form1_Load(object sender, EventArgs e)
    {
        if (logger == null) logger = LogManager.GetCurrentClassLogger();
    }
于 2012-07-24T15:29:44.697 回答
1

winform1_Load 1.通常在完成后初始化记录器InitializeComponent-> 已初始化您自己的 RichTextBox。

2.然后确保你RichTextBoxTargetFormNameControlName初始化好的。如:

RichTextBoxTarget rtbTarget = new RichTextBoxTarget();
logConfig.AddTarget("richTextBox", rtbTarget);
rtbTarget.FormName = "frmScrapeAmazonProduct"; // your winform class name
rtbTarget.ControlName = "rtbLog"; // your RichTextBox control/variable name

更多可以参考我的帖子

于 2013-06-11T06:00:34.497 回答
1

不要忘记添加

LogManager.ReconfigExistingLoggers();

如果以编程方式将richtextbox 设置为记录器

于 2020-06-16T17:31:09.373 回答
1

以下是三个提示,可帮助您在现有 RichTextBox 中加载日志。

  1. 确保formName和controlName与实际使用一致
  2. allowAccessoryFormCreation="False"在 NLog.config 中设置
  3. RichTextBoxTarget.ReInitializeAllTextboxes(this);在 Form_Load

PS:按照这种方式,你需要在NLog.config中配置你的RichTextBoxTarget,请参考RictTextBoxTarget

于 2018-06-20T01:17:46.847 回答
0

https://github.com/NLog/NLog.Windows.Forms/wiki/RichTextBoxTarget

我在登录 windows.form 时遇到了类似的问题。我将 Nugget 中的 NLog.Windows.Forms 与 Nlog 和 Nlog.config 一起使用。我按照链接中的给定模板进行操作,无需任何手动初始化即可使其工作。我将部分代码提供到 Nlog.config 中。希望能帮助到你。

<targets>
<target xsi:type="RichTextBox"
      name="richTextBox1"
      layout="${longdate}|${level:uppercase=true}|${logger}|${message}"
      height="30"
      autoScroll="true"
      maxLines="60"
      showMinimized="true"
      toolWindow="true"
      controlName="richTextBox1"
      formName="Form1"
      width="50"
      useDefaultRowColoringRules="true"
      allowAccessoryFormCreation="true"
      messageRetention="None"
      supportLinks="false"
>
</target>
</targets>
于 2019-01-17T15:43:06.990 回答