3

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

我想使用 FileAppender。

我有一个具有 DLLMain 和 3 个导出函数的 win32 DLL。

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

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

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

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

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

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

4

1 回答 1

2

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

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

我应该将代码放在哪里,以便启用 log4cplus 宏并在 DLL 中的所有函数中工作?

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

在普通程序中,我将使用全局变量,使用 main 或一些 ctor 来设置它们,然后一切都可以看到它们。我在 DLL 中做什么?

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

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

这不应该是必要的。

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

更新

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

于 2013-09-18T20:00:00.427 回答