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.然后让你的RichTextBoxTarget
的FormName
和ControlName
初始化为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中的日志。
- 确保formName和controlName与实际使用一致
- 在NLog.config中设置
allowAccessoryFormCreation="False"
-
RichTextBoxTarget.ReInitializeAllTextboxes(this);
在Form_Load中
PS:按照这种方式,你需要在NLog.config中配置你的RichTextBoxTarget,请参考RictTextBoxTarget 。