c++ - 使用 RollingFileAppender 时是否需要显式释放内存?

标签 c++ logging log4cplus

我正在实现 log4cplus 的示例代码,其中我使用 RollingFileAppender 来存储日志消息。 我的问题是我是否需要通过调用析构函数显式释放由以下行分配的内存:

SharedAppenderPtr myAppender1(new RollingFileAppender(LOG4CPLUS_TEXT("myTTCCLayoutLogFile.log"),
                                                               3 * 1024 * 1024,    // Max backup size
                                                               3));                // Max index

整个代码是:

#include "samplefileloggerheader.h"

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Entry point for the program
//
int main()
{
    //
    // Local variables definition
    //
    int                     initLoop    = 0;    // Initialization variable for
                                                // the loop
    int                     LOOP_COUNT  = 100000;
    std::auto_ptr<Layout>   myLayout1;

    //
    // Function logic begins here
    //
    for (;;)
    {
        log4cplus::initialize();

        //
        // LogLog class is used to output log statements from within the
        // log4cplus package.
        // setInternalDebugging() Allows to enable/disable log4cplus
        // internal logging
        //
        helpers::LogLog::getLogLog()->setInternalDebugging( true );

        //
        // Instantiating a file appender that will append events in the
        // TTCCLayout() layout
        //
        SharedAppenderPtr myAppender1(new RollingFileAppender(LOG4CPLUS_TEXT("myTTCCLayoutLogFile.log"),
                                                               3 * 1024 * 1024,    // Max backup size
                                                               3));                // Max index
        myAppender1->setName(LOG4CPLUS_TEXT("sampleAppender1"));

        //
        // Instantiating a layout object
        //
        myLayout1 = std::auto_ptr<Layout>(new log4cplus::TTCCLayout());

        //
        // Attaching the layout object with the appender object
        //
        myAppender1->setLayout(myLayout1);

        //
        // Getting the root logger
        //
        Logger::getRoot().addAppender(myAppender1);

        //
        // Creating instances of logger
        //
        Logger  root        = Logger::getRoot();
        Logger  test        = Logger::getInstance(LOG4CPLUS_TEXT("test"));
        Logger  subTest     = Logger::getInstance(LOG4CPLUS_TEXT("test.subTest"));

        //
        // Writing the logs to the file
        //
        for (initLoop; initLoop < LOOP_COUNT; ++initLoop)
        {
            NDCContextCreator _context(LOG4CPLUS_TEXT("for()"));
            LOG4CPLUS_DEBUG(subTest, "Loop count index is : " << initLoop);
        } // for

        //
        // Final break statement
        //
        break;
    } // for

   return 0;
} // main()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

还有一个问题,我需要处理多线程还是log4clpus帮我做?

最佳答案

我不知道 log4clplus 库,但变量类型的名称 (SharedAppenderPtr) 表明它是一种 shared_ptr 应该采用关心为您释放资源。

关于c++ - 使用 RollingFileAppender 时是否需要显式释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20488657/

相关文章:

C++ std::cout 和字符串打印顺序错误

C++ 代码中的 iPhone/iPad fatal error 在日志中不产生任何输出

c++ - Firebreath NPAPI 插件如何登录

c++ - 带有日志系统多类示例的 Appender

c++ - 推导模板的非类型名参数的值

c++ - glPush/PopMatrix() 和 glRotatef() 似乎是单独移动对象,而不是 glPush/PopMatrix() 中包含的所有对象

java - 使用 Gradle 运行 jUnit 测试时将 JUL 日志语句传递给 Log4j2

html - 在 C++ linux 中使用 log4cplus 将日志写入 html 文件

c++ - 完美的单例设计模式

linux - 存储脚本输出时删除 ANSI 代码