按大小滚动文件
在Easylogging++中,已经实现了按照日志文件大小来滚动日志记录。有一个配置项:MAX_LOG_FILE_SIZE,这个配置项的值(以字节为单位)表示的就是日志文件的最大大小。一旦日志文件的大小达到这个配置项设置的值,日志文件就会自动清空文件中所有的日志记录,并重新开始写入。不过配置项MAX_LOG_FILE_SIZE在默认情况下是不生效的,需要设置标记:LoggingFlag::StrictLogFileSizeCheck来激活。另外,如果我们想要保留之前的日志记录,那么我们可以注册一个回调函数,这个回调函数将会允许我们在清空日志文件之前对日志文件进行一次处理。下面的代码演示了按大小滚动日志文件,并通过回调函数保留了所有的日志记录:
#include "easylogging++.h"
INITIALIZE_EASYLOGGINGPP
static unsigned int idx;
void rolloutHandler(const char* filename, std::size_t size)
{
/// 备份日志
system("mkdir bin");
std::stringstream ss;
ss << "move " << filename << " bin\\log_backup_" << ++idx;
system(ss.str().c_str());
}
int main(int, char**)
{
idx = 0;
el::Loggers::addFlag(el::LoggingFlag::StrictLogFileSizeCheck);
el::Loggers::reconfigureAllLoggers(el::ConfigurationType::MaxLogFileSize, "100");
/// 注册回调函数
el::Helpers::installPreRollOutCallback(rolloutHandler);
for (int i = 0; i < 100; ++i)
{
LOG(INFO) << "Test";
}
/// 注销回调函数
el::Helpers::uninstallPreRollOutCallback();
return 0;
}
通过配置文件来设置配置项 MAX_LOG_FILE_SIZE 的大小也可以实现上述演示代码的效果,另外我们还可以设置不同级别的日志文件按照不同的文件大小来滚动。如果不小心忘记了设置标记:LoggingFlag::StrictLogFileSizeCheck ,我们还可以通过调用函数 el::Helpers::validateFileRolling(el::Logger*, const el::Level&) 以手动的方式来检查日志滚动,建议各位小伙伴可以自己尝试一下。
按时间滚动文件
在Easylogging