log4cplus 使用TimeBasedRollingFileAppender时 日志清空的问题

使用log4cplus时,配置项用TimeBasedRollingFileAppender,当程序中某一个线程调用exit(1)后,日志就被清空了。

暂时解决方法:

找到log4cxx中的fileappender.cxx这个文件,将TimeBasedRollingFileAppender::rollover(bool alreadyLocked)函数中的open(std::ios::out | std::ios::trunc);屏蔽掉

结果如下:

void
TimeBasedRollingFileAppender::rollover(bool alreadyLocked)
{
    helpers::LockFileGuard guard;

    if (useLockFile && ! alreadyLocked)
    {
        try
        {
            guard.attach_and_lock (*lockFile);
        }
        catch (std::runtime_error const &)
        {
            return;
        }
    }

    // Close the current file
    out.close();
    // reset flags since the C++ standard specified that all the flags
    // should remain unchanged on a close
    out.clear();

    if (! filename.empty())
    {
        helpers::LogLog & loglog = helpers::getLogLog();
        long ret;

#if defined (_WIN32)
        // Try to remove the target first. It seems it is not
        // possible to rename over existing file.
        ret = file_remove (scheduledFilename);
#endif

        loglog.debug(
            LOG4CPLUS_TEXT("Renaming file ")
            + filename
            + LOG4CPLUS_TEXT(" to ")
            + scheduledFilename);
        ret = file_rename (filename, scheduledFilename);
        loglog_renaming_result (loglog, filename, scheduledFilename, ret);
    }

    Time now = helpers::now();
    clean(now);

    //open(std::ios::out | std::ios::trunc);

    nextRolloverTime = calculateNextRolloverTime(now);
}

然后重新编译即可

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
首先,需要在项目中引入log4cplus库。具体方法可以在log4cplus的官网上找到相应的下载链接和使用说明。 在项目中使用log4cplus,需要进行以下步骤: 1. 在代码中引入log4cplus的头文件,例如: ``` #include <log4cplus/logger.h> #include <log4cplus/fileappender.h> #include <log4cplus/consoleappender.h> #include <log4cplus/layout.h> ``` 2. 初始化log4cplus,例如: ``` log4cplus::initialize(); ``` 3. 创建logger对象,例如: ``` log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("MyLogger")); ``` 4. 创建appender对象,例如: ``` log4cplus::SharedAppenderPtr consoleAppender(new log4cplus::ConsoleAppender()); log4cplus::SharedAppenderPtr fileAppender(new log4cplus::FileAppender(LOG4CPLUS_TEXT("mylog.log"))); ``` 5. 设置appender对象的layout,例如: ``` log4cplus::LogFormattePtr formatter(new log4cplus::PatternLayout(LOG4CPLUS_TEXT("%d{%m/%d/%y %H:%M:%S.%q} %c %-5p - %m%n"))); consoleAppender->setLayout(formatter); fileAppender->setLayout(formatter); ``` 6. 将appender对象添加到logger对象中,例如: ``` logger.addAppender(consoleAppender); logger.addAppender(fileAppender); ``` 7. 记录日志,例如: ``` LOG4CPLUS_DEBUG(logger, "This is a debug message."); LOG4CPLUS_INFO(logger, "This is an info message."); LOG4CPLUS_WARN(logger, "This is a warn message."); LOG4CPLUS_ERROR(logger, "This is an error message."); LOG4CPLUS_FATAL(logger, "This is a fatal message."); ``` 以上是一个简单的log4cplus使用示例,具体使用方法可以参考log4cplus的官方文档和示例代码。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值