NLog如何在自定义记录器类中使用隔离的日志工厂



我遇到了一个问题,因为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

相关内容

  • 没有找到相关文章

最新更新