2

Nlog を使用してログを記録すると、nLog への呼び出しごとにログ ファイルに 5 つのエントリがあることがわかりました。どうすれば修正できますか?たとえば。

2012-12-23 18:18:19.2465 NinjaTrader.Strategy.LODHOD.OnStartUp Debug   startup
2012-12-23 18:18:19.2465 NinjaTrader.Strategy.LODHOD.OnStartUp Debug   startup
2012-12-23 18:18:19.2465 NinjaTrader.Strategy.LODHOD.OnStartUp Debug   startup
2012-12-23 18:18:19.2465 NinjaTrader.Strategy.LODHOD.OnStartUp Debug   startup
2012-12-23 18:18:19.2465 NinjaTrader.Strategy.LODHOD.OnStartUp Debug   startup
2012-12-23 18:18:19.2465 NinjaTrader.Strategy.LODHOD.OnStartUp Debug   startup

私のnLog設定は以下の通りです

/****CLASS LEVEL VARIABLES***/
// Step 1. Create configuration object 
private static LoggingConfiguration config = new LoggingConfiguration();
private static FileTarget fileTarget = new FileTarget();
private static Logger logger = LogManager.GetCurrentClassLogger();
/*** END OF CLASS LEVEL VARIABLES ***/

/*************************NLOG CONFIG*****/

fileTarget.FileName = 
  "C:\\temp\\" + Instrument.FullName + "nLog." + DateTime.Now.Ticks + ".log";
fileTarget.Layout = 
  "${longdate} ${callsite} ${level} ${event-context:item=StrategyId}  ${message}";

config.AddTarget("file", fileTarget);

// Step 4. Define rules
LoggingRule rule2 = new LoggingRule("*", NLog.LogLevel.Trace, fileTarget);
config.LoggingRules.Add(rule2);

// Step 5. Activate the configuration
LogManager.Configuration = config;


logger.Debug("startup");


/*************************NLOG CONFIG*****/

スターアップが 6 回出力されているのを確認できます。これは、Ninjatrader onStartup のプログラムの開始時にプログラムで 1 回だけ呼び出されます。

範囲指定された Global Diagnistoc も持っていますが、これが原因になるとは思いません

public class ScopedGlobalContext : IDisposable
{
  private string n;
  private string v;

  public ScopedGlobalContext(string name, string value)
  {
    n = name;
    v = value;
    NLog.GlobalDiagnosticsContext.Set(n, v);
  }

  public void Dispose()
  {
    NLog.GlobalDiagnosticsContext.Remove(n);
  }
}   
4

5 に答える 5

5

インスタンス ファイルを対象とするルールが複数ある場合は、複数の書き込みが発生します。

于 2013-11-04T09:32:51.573 に答える
2

私にも同じことが起こりました。いくつかの検索では、他の人が同じ問題を抱えていますが、解決策はありません。これは、複数のスレッドを実行している場合や、ロギングを実行するコードがLinqクエリによって呼び出されている場合に発生するバグだと思います。Linqは常にすぐにまたは一度だけ実行されるわけではないことを忘れないでください。

于 2013-02-20T16:45:49.057 に答える