5

以下は私の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>

ありがとうございました。

4

5 に答える 5

10

あなたの問題に対する答えは、ここのNLogCodeplexフォーラムで見つけることができると思います。

フォームstatic logger内のフィールド宣言で直接初期化すると、インスタンスはまだ存在せず、NLogはターゲットの新しいフォームの作成を続行します。Form1Form1 RichTextBox

あなたがする必要があるのは、例えばイベントハンドラーで、インスタンスがすでに初期化loggerされている時間までの初期化を遅らせることです。Form1Load

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

不要な再初期化を回避するために、loggerまだ初期化されていない場合にのみ初期化することをお勧めします。

    private void Form1_Load(object sender, EventArgs e)
    {
        if (logger == null) logger = LogManager.GetCurrentClassLogger();
    }
于 2012-07-24T15:29:44.697 に答える
1

1.通常、ロガーをwinform1_Load 初期化しInitializeComponentます->独自のRichTextBoxを初期化します。

2.次に、を確認し、初期化して問題ありませRichTextBoxTargetん。そのような:FormNameControlName

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

もっと私の投稿を参照することができます

于 2013-06-11T06:00:34.497 に答える
1

既存のRichTextBoxにログをロードするのに役立つ3つのヒントを次に示します。

  1. formNameとcontrolNameが実際の使用法と一致していることを確認してください
  2. allowAccessoryFormCreation="False"NLog.configで設定
  3. RichTextBoxTarget.ReInitializeAllTextboxes(this);Form_Loadで

PS:この方法に従って、NLog.configでRichTextBoxTargetを構成する必要があります。RictTextBoxTargetを参照してください。

于 2018-06-20T01:17:46.847 に答える
1

追加することを忘れないでください

LogManager.ReconfigExistingLoggers();

リッチテキストボックスをプログラムでロガーとして設定する場合

于 2020-06-16T17:31:09.373 に答える
0

https://github.com/NLog/NLog.Windows.Forms/wiki/RichTextBoxTarget

windows.formにログインするのと同様の問題があります。NlogとNuggetのNLog.Windows.FormsとNlog.configを使用しました。リンクから指定されたテンプレートに従い、手動で初期化せずに機能させることができます。コードの一部をNlog.configに提供します。それが役に立てば幸い。

<targets>
<target xsi:type="RichTextBox"
      name="richTextBox1"
      layout="${longdate}|${level:uppercase=true}|${logger}|${message}"
      height="30"
      autoScroll="true"
      maxLines="60"
      showMinimized="true"
      toolWindow="true"
      controlName="richTextBox1"
      formName="Form1"
      width="50"
      useDefaultRowColoringRules="true"
      allowAccessoryFormCreation="true"
      messageRetention="None"
      supportLinks="false"
>
</target>
</targets>
于 2019-01-17T15:43:06.990 に答える