在DLL中使用Log4Cplus的最佳做法是什么?
我想使用FileAppender。
我有一个win32 DLL,它有DLLMain,还有3个导出的函数。
我在哪里定义Appender和Layout对象?在哪里设置他们的属性? 我在哪里将它们链接到记录器?
我想通过调用:
在dll中的所有类中使用记录器Logger myLogger= Logger::getInstance("myLoggerName");
我应该在哪里放置代码,以便我可以启用log4cplus宏并在dll中的所有函数中工作?
在正常程序中,我将使用全局变量,使用main或某些ctor来设置它们,然后一切都可以看到它们。 我在dll里面做什么?
(我不想在每个导出的函数中调用设置代码,但只在加载dll时调用一次)
答案 0 :(得分: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管理。