使用boost::log检查日志记录中是否有指定的属性

176 篇文章 ¥59.90 ¥99.00
本文介绍了如何在Boost.Log中使用has_attr检查日志记录是否包含特定属性。示例展示了如何设置过滤器并检查已知和未知属性的存在。

使用boost::log检查日志记录中是否有指定的属性

在使用 Boost.Log 记录日志时,我们可以为每个记录设置一个或多个属性。属性可以是任何我们想要关联到日志记录的信息。在某些情况下,我们需要判断特定属性是否存在于日志记录中。boost::log::expressions::has_attr就是用来做这样的操作。

下面是一个使用 has_attr 的例子:

#include <boost/log/core.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/attributes.hpp>
#include <boost/log/sinks.hpp>
#include <boost/log/sources/logger.hpp>
#include <boost/log/utility/setup/console.hpp>
#include <iostream>

namespace logging = boost::log;
namespace src = boost::log::sources;
namespace expr = boost::log::expressions;
namespace attrs = boost::log::attributes;
namespace sinks = boost::log::sinks;

void init()
{
    logging::add_console_log(
        std::cout,
        logging::keywords::format = (
     
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、付费专栏及课程。

余额充值