使用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);
}
然后重新编译即可