boost::format, std::stringstream

本文通过实例对比了Boost.Format和C++标准库中的stringstream在格式化字符串方面的应用。展示了如何使用这两种方式来输出带有变量的字符串,并讨论了它们的可读性和使用习惯。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stringstream完全适用, boost::format感觉代码可读性不好,可能还不习惯吧


#include <iostream>
#include <boost/format.hpp>
#include <string>
#include <sstream>

int _tmain(int argc, _TCHAR* argv[])
{
	std::string str = "sum";
	int i = 100, j = 200;
	std::cout << boost::format("%s:%d+%d=%d")%str%i%j%(i+j) << std::endl;
	
	boost::format fm("product:%1% * %2% = %3%");
	std::cout << fm %3 %5 %(3*5) << std::endl;

	int *p = &i;
	std::cout << boost::format("address:0x%x")%p << std::endl;

	std::stringstream ss;
	ss << str << ":" << i << "+" << j << "=" << i+j;
	std::cout << ss.str() << std::endl;

	system("pause");
	return 0;
}


RtErrMsg SDService::InitBoostLog() { RtErrMsg ret; ret.code_ = kErr_Ok; if (boost_log_inited_) { return ret; // 已经初始化过了 } if (IsSDCardMounted()) { std::string log_dir = sdCardInfo_.mount_point_ + "/dac_log/logs"; std::size_t max_size = std::size_t(45ULL * 1024 * 1024 * 1024); LOG(INFO) << "Initializing Boost Log with directory: " << log_dir; init_logging(log_dir, max_size); boost_log_inited_ = true; } else { ret.code_ = kErr_NOTMounted; ret.msg_ = "SD card is not mounted, cannot initialize boost log"; return ret; } return ret; } void SDService::init_logging(const std::string& log_dir, std::size_t max_total_size_bytes) { // 1. 创建一个同步文件 sink,后端为 text_file_backend typedef sinks::synchronous_sink<sinks::text_file_backend> sink_t; boost::shared_ptr<sink_t> sink = boost::make_shared<sink_t>( // 文件名模式:xxx_HH:MM:SS_1h.log keywords::file_name = log_dir + "/dac_%Y-%m-%d-%H_1h.log", keywords::open_mode = std::ios_base::app); // 2. 每隔 1 小时滚动一次文件 sink->locked_backend()->set_time_based_rotation( sinks::file::rotation_at_time_interval(pt::hours(1))); // 3. 配置文件收集器(file collector) sink->locked_backend()->set_file_collector(sinks::file::make_collector( keywords::target = log_dir, // 日志存放目录 keywords::max_size = max_total_size_bytes, // 超过该总大小时开始删除最旧文件 keywords::min_free_space = std::size_t(1ULL * 1024 * 1024 * 1024) // (可选)保证的最小空闲空间 )); sink->locked_backend()->auto_flush(true); // 扫描现有文件以纳入管理 sink->locked_backend()->scan_for_files(); // 4. 设置日志记录格式(可选) sink->set_formatter(expr::stream << "[" << expr::format_date_time<boost::posix_time::ptime>( "TimeStamp", "%Y-%m-%d %H:%M:%S") << "] <" << trivial::severity << "> " << expr::smessage); // 5. 注册到 logging core boost_logging::core::get()->add_sink(sink); BOOST_LOG_TRIVIAL(info) << "Boost.Log initialized, trigger cleanup if needed."; } SD卡上已经有日志文件,总大小64G,已使用了49GB, 还剩11GB, 启动之后,最旧的日志文件并没有被删除
最新发布
06-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值