2012-12-24 92 views
1

我使用Nlog進行日誌記錄,並且我發現每次調用nLog時我的日誌文件中都有5個條目。我該如何解決它?例如 。重複的日誌條目Nlog

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 

我的n日誌配置爲如下

/****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*****/ 

可以看到的Starup印刷6次,它是在Ninjatrader onStartup節目的開頭稱爲只在一次程序。

我也有範圍的全球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); 
    } 
} 
+0

由於你的規則被稱爲規則2,你有多個? – ccellar

+0

沒有。那就是我對nLog的所有代碼。我刪除了rule1但忘了重命名變量。我仍然不確定它爲什麼打印6次 – junkone

+0

您是否在app.config或NLog.config中有任何NLog配置?你有沒有發佈你所有的NLog配置代碼?我看到你有一個變量,「配置」,它來自哪裏? – wageoghe

回答

2

我有同樣的事情發生在我身上。幾次搜索會導致其他人遇到同樣的問題,但沒有解決方案。我認爲這是一個錯誤,如果你正在運行多個線程和/或如果在Linq查詢中調用日誌記錄的話。記住,Linq總是立即執行。雖然這不是答案,但它應該可以幫助您找到問題的根源。

4

如果您有多個針對實例文件的規則,那麼您會對其進行多次寫入。

+0

這個線程在nlog論壇中建議使用'final'來防止這個:http://nlog-forum.1685105.n2.nabble.com/Duplicate-log-entries-caused-by-duplicate-rules-td6587621.html –