boost日志的编写

Streams、Stream Buffers、Sources和Sinks这些设计思路:

Streams:

使用日志记录宏(如BOOST_LOG_TRIVIAL(info)),将日志消息以类似于流操作的方式输出到日志记录器中。
Stream Buffers:

使用具体的Stream Buffers(如text_ostream_backend或text_file_backend)来处理日志消息的缓冲和输出,通过配置格式化、文件名等参数。
将Stream Buffer与日志记录器(Logger)相关联,以决定日志消息的输出位置和方式。
Sources:

创建不同的日志记录器(Logger)对象来表示不同的日志消息源头。
为每个日志记录器配置相应的Stream Buffer、输出格式、过滤器和日志级别等。
使用日志记录宏时,选择对应的日志记录器,将日志消息发送到相应的源头。
Sinks:

在配置文件中或代码中,创建多个Sink对象,每个Sink表示一个输出目标(如标准输出、文件)。
将Sink对象与相应的Stream Buffer关联,将日志消息从Stream Buffer发送到具体的输出目标。
通过将这些设计思路融入代码中,您可以使用Boost日志库在代码中实现灵活、可配置的日志记录和输出。具体的代码会根据您的需求和配置方式而有所不同,您可以参考Boost日志库的官方文档和示例来了解更多详细信息。

// 自定义属性
BOOST_LOG_ATTRIBUTE_KEYWORD(module, "Module", std::string)

// 为 ModuleA 设置接收器
	logging::add_file_log(
		logging::keywords::file_name = "moduleA.log",
		logging::keywords::filter = module == "ModuleA",
		logging::keywords::format = (
			expr::stream
			<< "[" << expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S.%f") << "]"
			<< "[" << logging::trivial::severity << "]"
			<< "[" << module << "]"
			<< " " << expr::smessage
			)
	);

logging::add_common_attributes();

src::severity_logger<logging::trivial::severity_level> lg1;
auto modulea=lg1.add_attribute("Module", attrs::constant<std::string>("ModuleA"));
BOOST_LOG_SEV(lg1, logging::trivial::info) << "This is a message from ModuleA.";

增加功能

增加一个只保存三个月的日志信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

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

BOOST_LOG_ATTRIBUTE_KEYWORD(module, "Module", std::string)

int main()
{
    // 为 ModuleA 设置接收器
    auto sink = logging::add_file_log(
        keywords::file_name = "moduleA.log",
        keywords::filter = module == "ModuleA",
        keywords::format = (
            expr::stream
            << "[" << expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S.%f") << "]"
            << "[" << logging::trivial::severity << "]"
            << "[" << module << "]"
            << " " << expr::smessage
        ),
        keywords::rotation_size = 10 * 1024 * 1024,  // 10MB
        keywords::time_based_rotation = logging::sinks::file::rotation_at_time_point(boost::posix_time::hours(24)),
        keywords::auto_flush = true
    );

    // 设置按日期滚动,保留三个月内的日志文件
    sink->locked_backend()->set_file_collector(logging::sinks::file::make_collector(
        keywords::target = ".",
        keywords::max_size = 3 * 30 * 24 * 60 * 60,  // 3个月的秒数
        keywords::min_free_space = 100 * 1024 * 1024));  // 硬盘剩余空间至少100MB

    logging::add_common_attributes();

    src::severity_logger<logging::trivial::severity_level> lg1;
    auto modulea = lg1.add_attribute("Module", attrs::constant<std::string>("ModuleA"));
    BOOST_LOG_SEV(lg1, logging::trivial::info) << "This is a message from ModuleA.";

    return 0;
}

你可能感兴趣的:(c++)