C++ 日志功能实现 在Widnows平台(Visual Studio)

简述

这篇文章介绍了,如何用boost.log库简单实现C++日志记录功能。集成日志功能是软件开发中至关重要的一部分,可以提供有关应用程序运行情况的宝贵信息,有助于改进、优化和确保应用程序的可靠性和性能。

安装

墙裂推荐用 Visual Studio 的 NuGet包管理器安装boost,NuGet会自动配置包含目录、库目录等设置。具体步骤如下,

  1. 打开NuGet包管理器:我使用的是Visual Studio 2022,在项目(Project)>管理NuGet程序包(Manage NuGet Packages)打开NuGet。

  2. 搜索Boost库: 在NuGet包管理器窗口中,点击右上角的搜索框,并输入“Boost”来搜索Boost库的NuGet包。

  3. 安装Boost NuGet包: 点击选定的Boost包,在右侧面板中,点击“安装”按钮来安装选定的包。注意不同的Visual Studio 20xx 版本对应不同的boost版本。Visual Studio 2022 对应的boost版本后缀是-vc143后缀。
    在这里插入图片描述

  4. 等待安装完成: NuGet包管理器会自动下载和安装选定的Boost库及其依赖项。安装完成后,你可以在你的C++代码中使用Boost库的功能。不需要手动配置包含目录、库目录等设置,NuGet会自动处理这些。

  5. 编译和运行: 确保你的项目能够正确编译,并运行示例代码来验证是否成功集成了Boost库。

  6. 注意:如果编译时,报错 LNK1104 cannot open file 'boost_system-vc140-mt.lib' 请在下载boost_system-vc140-mt.lib文件并保存到 projectName\packages\boost_system-vc143.1.83.0\lib\native文件夹内。若你在网络中未找到此文件,请留言邮箱,我发给你。(这个问题似乎只发生在VS2022版本)

示例代码

下面我写了2个代码示例。示例1演示如何简单地将日志信息写到本地文件。示例2,则进阶地展示了如何将时间戳(TimeStample)、线程ID(ThreadID)等信息加入到日志文件中。

Example 1

下面代码展示了,如何将简单地将日志信息写到本地文件中。

#include <boost/log/trivial.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/expressions.hpp>
#include <iostream>

namespace logging = boost::log;

int main(int argc, char** argv)
{
    // sample.log是日志文件的路径
	logging::add_file_log("sample.log");
	// 将内容写入日志文件的方法
	BOOST_LOG_TRIVIAL(info) << "This is a test message.";
	return 0;
}

代码成功运行后,本地工作目录下会生成"sample.log"文件,用记事本打开即可见到所写内容。
请添加图片描述

Example 2

进阶地,为日志消息加入时间戳(TimeStample)、线程ID(ThreadID)、消息严重级别(Severity)。

#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>

namespace logging = boost::log;
namespace keywords = boost::log::keywords;

/// <summary>
/// Initialize the log file. 初始化日志文件函数
/// </summary>
/// <param name="log_path"> path/to/log_file. 日志文件的路径</param>
void init_logging(const std::string& log_path)
{
	logging::register_simple_formatter_factory<logging::trivial::severity_level, char>("Severity");

    // keywords::format设置日志格式,即可加入时间戳、线程ID等信息
	logging::add_file_log
	(
		keywords::file_name = log_path,
		keywords::format = "[%TimeStamp%] [%ThreadID%] [%Severity%] %Message%"
	)

	logging::add_common_attributes();
}

int main(int argc, char** argv)
{
    // 初始化日志文件.
	std::string log_path = "./sample.log";
	init_logging(log_path);
    
	BOOST_LOG_TRIVIAL(info) << "This is a test message.";

	return 0;
}

保存的日志文件效果如下图。
请添加图片描述

Reference

  1. https://www.sentinelone.com/blog/getting-started-quickly-cplusplus-logging/
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值