使用Boost的Log库,将日志信息写入文件,日志将按时间滚动。详见代码:
#include <boost/date_time/posix_time/posix_time_types.hpp>
#include <boost/log/core.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/sync_frontend.hpp>
#include <boost/log/sinks/text_ostream_backend.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/support/date_time.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/trivial.hpp>
namespace logging = boost::log;
namespace sinks = boost::log::sinks;
namespace src = boost::log::sources;
namespace expr = boost::log::expressions;
namespace attrs = boost::log::attributes;
namespace keywords = boost::log::keywords;
void init_log_lib()
{
auto sink = logging::add_file_log(
keywords::file_name = "%Y%m%d_%4N.log",
keywords::rotation_size = 5 * 1024 * 1024,
keywords::time_based_rotation =
sinks::file::rotation_at_time_point(23,59,59),
keywords::format = (
expr::stream<< expr::format_date_time<boost::posix_time::ptime>("TimeStamp",
"%Y-%m-%d %H:%M:%S") << " <" <<logging::trivial::severity<<
"> "<<expr::smessage
)
);
sink->locked_backend()->set_file_collector(
sinks::file::make_collector(
keywords::target = "./logs",
keywords::max_size = 500*1024*1024,
keywords::min_free_space = 800*1024*1024
)
);
sink->locked_backend()->auto_flush(true);
sink->locked_backend()->scan_for_files();
logging::core::get()->set_filter(
logging::trivial::severity >= logging::trivial::trace
);
logging::add_common_attributes();
}
void close_log_lib()
{
logging::core::get()->remove_all_sinks();
}
void log_msg(const std::string& msg)
{
src::severity_logger_mt<logging::trivial::severity_level> lg;
BOOST_LOG_SEV(lg, logging::trivial::info) << msg;
}
int main()
{
init_log_lib();
log_msg("Hello World!\n");
close_log_lib();
return 0;
}
该代码示例展示了如何使用Boost.Log库在C++中配置日志系统,将日志信息写入文件并按照日期和时间进行滚动,每天结束时自动创建新文件。日志文件保存在./logs目录下,且当达到一定大小或磁盘空间不足时会进行清理。主要涉及的日志级别、文件命名规则、文件大小限制和自动刷新功能。
396

被折叠的 条评论
为什么被折叠?



