混合 C#\C++ 应用程序中的 NLog

NLog in mixed C#\C++ Application

我们在我们的解决方案中使用 NLog,它主要是一个 C# 应用程序。然而,我们确实有一个本机 C++ DLL 项目和一个包装它的托管 C++ DLL 项目。我们希望能够像在整个应用程序的其余部分一样从这些项目记录到 NLog。

我在网上找到了一些提示,表明这是可能的,但所有的线索都变冷了。

有谁知道这是否可行或如何进行?谢谢

这在 NLog 2(称为 NLogC)中得到支持。

NLog 3 中已取消对它的支持:http://nlog-project.org/2013/12/14/nlog-3-0.html

我可能会在您的解决方案中添加一个 C++/Interop-Helper-project,这样 实现抽象的 C++ 日志记录接口,调用 .NET NLog 方法。

然后 Helper 项目将作为 C# 应用程序和现有 C++ DLL 项目之间的接口。它将初始化 C++ DLL 并将抽象的 C++ 日志记录接口提供给 C++ DLL。

有了这个方法,就可以使用任何版本的NLog了。

我实际上能够使用托管 C++ 项目中的 NLog,而且我还没有看到任何其他这种工作的示例。事实上,我认为 NLog 开发团队不支持它。但是能够将日志记录添加到托管 C++ 项目真是太好了。如果您需要说明,我可以提供。如果您正在寻找用于本机 C++ 的 NLog 解决方案的解决方案,则有一个支持它的旧版本 2.0。看这个例子:How to use NLog in C++?

这是我在 CLR 控制台应用程序 VS 2013 和 NLog 4.0.0 中 运行 的代码:

using namespace NLog;

NLog::Logger^ LO = nullptr;
NLog::LogManager^ LM = nullptr;
LO = LM->GetCurrentClassLogger();
LO->Debug("Ha");