2012-12-24 4 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 

내 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*****/ 
당신이 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

규칙은 rule2라고 불리우므로 여러 규칙이 있습니까? – ccellar

+0

번호. 그것이 내가 nLog에 대해 가지고있는 모든 코드입니다. 나는 규칙 1을 삭제했지만 변수의 이름을 바꾸는 것을 잊었습니다. 나는 그것이 왜 6 번 인쇄되는지 아직도 확신하지 못합니다. – junkone

+0

app.config 또는 NLog.config에서 NLog 구성을 가지고 있습니까? NLog 구성 코드를 모두 게시 했습니까? 변수 "config"가있는 것을 보았습니다. – wageoghe

답변

2

일이 발생할 수 있습니다 같아요. 여러 번 검색하면 같은 문제가있는 다른 사람들이 검색되지만 해결책은 없습니다. 나는 이것이 여러 스레드를 실행하고 있거나 로깅이 Linq 쿼리 내에서 호출되는 경우에 발생하는 버그라고 생각합니다. Linq는 항상 즉시 실행된다는 것을 기억하십시오. 이것은 답변이 아니지만 문제의 원인을 찾는 데 도움이됩니다.

4

인스턴스 파일을 대상으로하는 규칙이 여러 개있는 경우 여러 개의 쓰기가 발생합니다.

+0

nlog 포럼의이 스레드는이를 방지하기 위해 'final'을 사용하도록 제안합니다. http://nlog-forum.1685105.n2.nabble.com/Duplicate-logent-caused-by-duplicate-rules-td6587621.html –