NLog控件到现有的RichTextBox Windows窗体

Alv*_*vin 5 c# nlog

下面是我的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>
Run Code Online (Sandbox Code Playgroud)

谢谢.

And*_*son 10

我认为你可以找到NLOG Codeplex上论坛回答您的问题,在这里.

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

您需要做的是loggerForm1实例初始化时的初始化延迟到一个时间,例如在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

    private void Form1_Load(object sender, EventArgs e)
    {
        if (logger == null) logger = LogManager.GetCurrentClassLogger();
    }
Run Code Online (Sandbox Code Playgroud)