我遇到了一个问题,因为LogManager是全局的,所以我的两个项目都覆盖了彼此的日志配置。第一个项目中的NLog日志调用可以正常工作,但是当调用到第二个项目时,所有未来的日志调用将使用第二个项目配置记录。
的例子:
- 目标1 "首次登录第一个项目"(应该是目标1)
- 目标2 "第二个项目的第二个日志"(应该是目标2)
- 目标2 "第三次登录第一个项目"(应该是目标1)
我发现孤立的logfactory解决了我的问题,现在记录器有正确的配置。然而,我不知道如何使用我的自定义NLog类与这种方法制作LogFactories。
这工作得很好(但不让我使用我的自定义类的方法):
private static Logger logger = MyLogger.MyLogManager.Instance.GetCurrentClassLogger();
:
private static MyLogger logger = (MyLogger)MyLogger.MyLogManager.Instance.GetCurrentClassLogger();
抛出:
System.TypeInitializationException: 'The type initializer for 'MyProject.MyClass.MyMethod' threw an exception.'
InvalidCastException: Unable to cast object of type 'NLog.Logger' to type 'MyProject.NLogConfigFolder.MyLogger'.
我已尝试将Logger转换为MyLogger,但未能成功。
下面是我对隔离的LogFactory的设置:
public class MyLogger : Logger
{
public class MyLogManager
{
public static LogFactory Instance { get { return _instance.Value; } }
private static Lazy<LogFactory> _instance = new Lazy<LogFactory>(BuildLogFactory);
private static LogFactory BuildLogFactory()
{
string configFilePath = "path/to/my/config"
LogFactory logFactory = new LogFactory();
logFactory.Configuration = new XmlLoggingConfiguration(configFilePath, true, logFactory);
return logFactory;
}
}
// Other methods here
}
感谢您的时间和帮助解决这个问题。
认为你只需要改变:
(MyLogger)MyLogger.MyLogManager.Instance.GetCurrentClassLogger()
这:
MyLogger.MyLogManager.Instance.GetCurrentClassLogger<MyLogger>()
参见:https://nlog-project.org/documentation/v5.0.0/html/Overload_NLog_LogFactory_GetCurrentClassLogger.htm