扩展日志回滚
日志回滚接口扩展后的日志回滚接口增加创建新文件的 LoggingFlag(CreateNewLogFile)改动后的实现
在上一篇我们介绍了 easylogging++的 异步日志 的实现。在结尾的时候,我们提到 easylogging++的默认实现不符合真实项目的需求,因此日志回滚的功能我们就需要根据实际的项目需求定制一下。今天我们就来看看如何定制日志回滚以满足真实项目的需求。
日志回滚接口
在 日志格式配置管理类 中我们介绍 TypedConfigurations 类的时候我们详细分析了 easylogging++提供的实现日志回滚的接口:
bool TypedConfigurations::unsafeValidateFileRolling(Level level, const PreRollOutCallback &preRollOutCallback)
{
base::type::fstream_t *fs = unsafeGetConfigByRef(level, &m_fileStreamMap, "fileStream").get();
if (fs == nullptr)
{
return true;
}
std::size_t maxLogFileSize = unsafeGetConfigByVal(level, &m_maxLogFileSizeMap, "maxLogFileSize");
std::size_t currFileSize = base::utils::File::getSizeOfFile(fs);
// 判断当前日志文件大小是否达到设定的阈值
if (maxLogFileSize != 0 && currFileSize >= maxLogFileSize)
{
std::string fname = unsafeGetConfigByRef(level, &m_filenameMap, "filename");
ELPP_INTERNAL_INFO(1, "Truncating log file ["
base::type::fstream_t *fs = unsafeGetConfigByRef(level, &m_fileStreamMap, "fileStream").get();
if (fs == nullptr)
{
return true;
}
std::size_t maxLogFileSize = unsafeGetConfigByVal(level, &m_maxLogFileSizeMap, "maxLogFileSize");
std::size_t currFileSize = base::utils::File::getSizeOfFile(fs);
if (maxLogFileSize != 0 && currFileSize >= maxLogFileSize)
{
std::string fname = unsafeGetConfigByRef(level, &m_filenameMap, "filename");
ELPP_INTERNAL_INFO(1, "Truncating log file ["
ELPP_INTERNAL_ERROR("Configurations is NULL, please re-check your configurations for level["
value();
std::string resolvedFilename;
do
{
// 调整文件名配置项值中的日期格式部分为实际当前时间,其中的"/"替换为"-"
resolvedFilename = resolveFilename(FilenameConfValue);
if (resolvedFilename.empty())
{
std::cerr
ELPP_INTERNAL_ERROR("Bad file ["
el::Loggers::addFlag(el::LoggingFlag::StrictLogFileSizeCheck);
el::Loggers::addFlag(el::LoggingFlag::CreateNewLogFile);
return 0;
}
至此,日志滚动的修改就完成了。 到目前为止,我们已经将 easylogging++的主要功能的实现基本都分析完了。从下一篇开始,我们将前面未分析过的类或者接口一一介绍。
|