【发布时间】:2018-05-23 14:38:03
【问题描述】:
我在单个项目中使用了更多的 NLog 实例(请参阅我之前的问题 Nlog config file priority)。但是,它并没有按预期工作。
如果我调用登录第二个项目的方法,它会正确记录,但即使在返回上一个项目后,项目也会被记录在错误的位置。
因此,例如 Project1 已设置为登录 Project1.log,第二个登录方式相同。我可以做简单调用的方法:
Project1.Log.Write("1");
Project2.Log.Write("2");
Project1.Log.Write("3");
当我查看日志时,project1 包含“1”,project 2 包含“2”和“3”。
精确(稍微简化)的记录器类如下所示:
public static class Log
{
private static readonly Lazy<Logger> Logger = new Lazy<Logger>(CreateLogger);
private static Logger CreateLogger()
{
string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
LogManager.Configuration = new XmlLoggingConfiguration(assemblyFolder + "\\ProjectX.exe.nlog", true); //X means project id
return LogManager.GetCurrentClassLogger();
}
public static void Write(object log)
{
Logger.Value.Debug(log);
}
}
我做错了什么?
【问题讨论】:
-
您修改静态 LogManager.Configuration,它是整个流程的单个实例。有关详细信息,请参阅 Rolf Kristensen 的回答。