Below is my NLog configuration, I want to load log into existing RichTextBox called rtMessage in Form1, but NLog will create a new windows with log message loaded into the 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>
Thank you.
I think you can find the answer to your issue on the NLog Codeplex forum, here.
If you initialize the static
logger
directly in the field declaration inside your Form1
form, the Form1
instance will not yet exist, and NLog will go on creating a new form for the RichTextBox
target.
What you need to do is delay the initialization of the logger
to a time when the Form1
instance is already initialized, for example in a Load
event handler.
Here is an excerpt of functional code from the Codeplex issue:
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();
}
}
To avoid unnecessary re-initialization, you might want to initialize logger
only if it has not already been initialized, i.e.
private void Form1_Load(object sender, EventArgs e)
{
if (logger == null) logger = LogManager.GetCurrentClassLogger();
}
1.normally init logger in winform1_Load
while it have done InitializeComponent
-> has init your own RichTextBox.
2.then makesure your RichTextBoxTarget
's FormName
and ControlName
initialized ok.
such as:
RichTextBoxTarget rtbTarget = new RichTextBoxTarget();
logConfig.AddTarget("richTextBox", rtbTarget);
rtbTarget.FormName = "frmScrapeAmazonProduct"; // your winform class name
rtbTarget.ControlName = "rtbLog"; // your RichTextBox control/variable name
more can refer my post
Here are three tips to help you load log in existing RichTextBox.
allowAccessoryFormCreation="False"
in NLog.configRichTextBoxTarget.ReInitializeAllTextboxes(this);
in Form_LoadPS:Follow this way, you neeed to config your RichTextBoxTarget in NLog.config, please refer RictTextBoxTarget.
Don't forget to add
LogManager.ReconfigExistingLoggers();
if setting the richtextbox as a logger programmatically
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With