【发布时间】:2012-12-24 10:40:00
【问题描述】:
我使用 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*****/
在 Ninjatrader onStartup 中,您可以看到该启动程序打印了 6 次,并且在程序开始时仅在程序中调用一次。
我也有范围内的 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);
}
}
【问题讨论】:
-
你的规则叫rule2,你有多个吗?
-
没有。这就是我为 nLog 提供的所有代码。我删除了 rule1 但忘记重命名变量。我仍然不确定为什么它会被打印 6 次
-
您是否有任何 NLog 配置,在 app.config 或 NLog.config 中?您是否发布了所有 NLog 配置代码?我看到你有一个变量“config”,它是从哪里来的?
-
这些只是我使用的类级别变量。我将它剪切并粘贴到我展示的代码示例中。
-
在第一个代码块中,您有一个名为“CLASS LEVEL VARIABLES”的部分(如 cmets 中所述)。每个班级都有相同的代码吗?我问这个是因为,你应该在你的应用程序中只配置一次 NLog,而不是每个类一次。您是否尝试过制作一个精简的程序/库来试验 NLog?如果您要做的事情较少,可能更容易弄清楚 NLog 发生了什么。