c++ - 如何在DLL中使用Log4Cplus

标签 c++ dll log4cplus

在 DLL 中使用 Log4Cplus 的最佳实践是什么?

我想使用 FileAppender。

我有一个 win32 DLL,它有 DLLMain 和 3 个导出函数。

我在哪里定义 Appender 和 Layout 对象?在哪里设置它们的属性? 我在哪里将它们链接到记录器?

我想在 dll 中的所有类中使用记录器,我猜只需调用:

Logger myLogger= Logger::getInstance("myLoggerName");

我应该把代码放在哪里,这样我就可以启用 log4cplus 宏并在 dll 中的所有函数中工作?

在正常的程序中,我会使用全局变量,使用 main 或一些 ctor 来设置它们,然后一切都可以看到它们。 我在 dll 中做什么?

(我不想在每个导出的函数中调用设置代码,而是在加载dll时只调用一次)

最佳答案

Where do I define the Appender and Layout object? Where to set their properties? Where do I link them to a logger?

一般来说,我认为你的 DLL 应该有一些你可以调用的 MyDLLInit() 函数,它会根据你的需要配置 log4cplus。

Where should I put the code so I can have the log4cplus macros enabled and working in all my functions inside the DLL?

你不需要在这里做任何特别的事情。只需包含 loggingmacros.h 即可获取宏并使用它们。

In a normal program I will use global variables, use main or some ctor to set them up and then everything can see them. What do I do inside a DLL?

在我看来,使用全局 Logger 实例(将由您的 MyDLLInit() 函数初始化)是可以的。但是,如果您的 DLL 有某种返回给用户的“上下文”句柄,请改用它并将 Logger 实例粘贴到“上下文”句柄中。

(I don't want to call the setup code in every exported function, but only once when dll is loaded)

这应该不是必需的。

查看作为源代码分发一部分的测试源,将它们用作如何实例化 AppenderLayout 的示例。例如,fileappender_test

更新

您不必在自己的任何变量中保留 Appender 或 Layout。两者都由 log4cplus 管理。在你执行了logger.addAppender(myappender)之后(对应于上面链接的fileappender_test中的第23行),包括myappender在内的所有变量都可以得到超出范围,可以销毁,因为 Appender 由 Logger 管理,Appender 的布局由 Appender 管理。

关于c++ - 如何在DLL中使用Log4Cplus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18867368/

相关文章:

c++ - 是否有用于 log4cplus 的标准 Autoconf 宏?

c++ - 帮助配置log4cplus配置文件(properties文件)

c++ - C++ 中用于唯一可重用 id 的最快容器或算法

C++ windows.h WriteFile 函数

c++ - C++中下列函数的返回类型是什么

c++ - 如何正确地覆盖从注入(inject)的 DLL 加载到内存中的指令?

c - mingw-w64 搜索 libws2_32.dll 而不是 ws2_32.dll

java - Java 和 JNI (dll) 之间的索引越界异常

c++ - 在较大字符串中查找字符串的函数

c++ - log4cplus: 动态加载配置脚本,如何解决这个问题?