NLog Only第一次在RichTextBox中显示

时间:2013-04-09 19:27:31

标签: nlog

我有一个带有Rich Text框的winform(LogView),我的配置设置为登录到该文本框。当我从另一个表单打开LogView时,开始记录第一次一切都很棒。当我再次尝试再次打开LogView时,对于第二次运行,Rich Text框中没有显示任何内容。

来电代码

    private void button1_Click(object sender, EventArgs e)
    {
        LogView frm = new LogView();
        frm.Show(this);
        NLog.Logger logger = NLog.LogManager.GetLogger("");
        logger.Info("FORM 2 LOG");
    }

LogView代码

    private void LogView_Load(object sender, EventArgs e)
    {
        try
        {
            var logger = LogManager.GetLogger("");
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception);
        }            //logger.Debug("test");
        backgroundWorker1.RunWorkerAsync();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

        for (int i = 1; (i <= 100); i++)
        {
            // Perform a time consuming operation and report progress.
            System.Threading.Thread.Sleep(500);
            var logger = LogManager.GetLogger("");
            logger.Debug("i = " + i.ToString());
        }
    }

有趣的是,使用这种方法即使是内置的NLog表单也不能第二次运行。

我使用的是2.0.1.0版 .NET 4.5

配置

<nlog autoReload="true">
<targets>
  <target name="richTextBox"
          type="RichTextBox"
          controlName="richTextBox1"
          formName="LogView"
          useDefaultRowColoringRules="false"
          layout="${date} ${level} ${logger} ${message}"/>
</targets>
<rules>
  <logger name="*" minlevel="Trace" writeTo="richTextBox"/>
</rules>
</nlog>

1 个答案:

答案 0 :(得分:0)

这是由NLog找到RichTextBox的方式引起的 首次加载配置时(第一次需要Logger),初始化RichTextBox目标,这意味着找到了RichTextBox,目标设置存储在缓存中。这意味着第二次加载表单时引用会出错。

这与https://github.com/NLog/NLog/issues/133中描述的问题有关。

更新: 您应该能够通过调用以下来清除缓存:

LogManager.Configuration.ReconfigExistingLoggers();

但请记住,这是一项昂贵的操作