NLog控件到现有的RichTextBox Windows窗体

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

      

谢谢。

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

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

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

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

 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(); } 

1.在完成InitializeComponent时,winform1_Load中的初始化记录器winform1_Load – >具有init自己的RichTextBox。

2.然后让你的RichTextBoxTargetFormNameControlName初始化为ok。 如:

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

更多可以参考我的post

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

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

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