如何在DLL中使用Log4Cplus

问题描述 投票:0回答:1

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

我想使用 FileAppender。

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

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

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

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

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

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

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

c++ dll log4cplus
1个回答
2
投票

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

一般来说,我认为你的DLL应该有一些

MyDLLInit()
函数,你可以调用它来根据你的需要配置log4cplus。

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

您不需要在这里做任何特别的事情。只需包含

loggingmacros.h
即可获取宏并使用它们。

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

在我看来,使用全局

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

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

这应该没有必要。

查看属于源代码分发的测试源代码,使用它们作为如何实例化

Appender
Layout
的示例。例如,
fileappender_test

更新

您不必将 Appender 或 Layout 保留在您自己的任何变量中。两者均由 log4cplus 管理。执行

logger.addAppender(myappender)
后(对应于上面链接的
fileappender_test
中的第 23 行),包括
myappender
在内的所有变量都可能超出范围并可能被销毁,因为 Appender 由 Logger 管理,并且 Appender 的布局是受管理的由 Appender 完成。

© www.soinside.com 2019 - 2024. All rights reserved.