就需要加上这些宏,为了方便,通常的做法是将日志封装成宏函数的形式,进行日志输出。 对于宏,有很多的优点,但是我个人不喜欢宏,调试不友好,只是进行简单的字符串替换,没有语法检查。 如果不使用宏,又没法在程序运行的时候获取需要的信息,因此,问题的关键是如何在非运行期获取行号等信息。 现代C++新增的constexpr关键...
封装 Logger.h #pragma once #include "Framework/Utility/Singleton.h" #include <spdlog/spdlog.h> #include <filesystem> namespace fs = std::filesystem; class Logger : public Singleton<Logger> { public: Logger(token); ~Logger(); std::shared_ptr<spdlog::logger> getLogger() { return mLogger...
get_async_file_logger()函数获取一个单独的异步文件日志记录器,主要用于记录多线程日志,一般情况下用的比较少。 用于简化日志记录的操作一些宏,spdlog自带的有日志宏,这里只是简化一下并做隔离,实际上是对spdlog库的相应函数进行了封装。 定义了一个LOGSW()宏,用于方便地创建一个时间统计器,使用时不需要过多的关...
{public:staticSimLog&Instance();voidInitSimLog(std::stringlogger_name,std::stringfile_name,intlog_level=spdlog::level::trace);voidEndLog();voidSetLevel(intlevel =spdlog::level::trace); auto GetLogger() {returnmy_logger_; }private://私有构造函数,拷贝构造函数和拷贝赋值函数,禁止在类外声明实例S...
MyLog::GetInstance().InitLogObject(); ……. std::stringstream ss; ss << __FILE__ << “:” << __FUNCTION__ << “:” << __LINE__ << “:”; ss<< std::this_thread::get_id(); MyLog::GetInstance().GetFileObject()->info(“日志:{},{}”, “测试文件”, ss.str().data()...
spdlog的简单封装和使用 头文件:app #ifndef _SIMLOG_H_ #define _SIMLOG_H_ #include <QtWidgets/QWidget> #include <spdlog/spdlog.h> #include "simlog_export.h" #ifdef _WIN32 //strrchr:查找字符在指定字符串从右面开始的第一次出现的位置,若是成功,返回该字符以及后面的字符,若是失败,返回NULL...
封装Log头文件# 一般的项目对日志要求都不高,主要是要求日志线程安全、异步写入文件、每天生成新日志、支持日志回调显示,spdlog稍微配置一下即可。 把spdlog相关的配置全放到Log.h文件中,封装成Log头文件有两个好处: 可以随时替换后台日志实现 对外只用暴露一个头文件 ...
使用std::once_flag和std::call_once确保初始化代码只执行一次,并且是线程安全的。 spdlog封装: 在initSpdlog函数中配置并初始化spdlog。 提供了info、warn、error等日志记录接口,这些接口内部调用spdlog的相关函数。 这样,我们就实现了一个集成了std::call_once和spdlog日志库的单例模式,可以在多线程环境下安全地...
spdlog日志是纯头文件,使用起来比较方便。使用时只需要简单的初始化即可,这里对其初始化做了一个简单的封装,这样使用起来更加方便。 封装类代码 头文件 cspdlog.h #ifndef _CSPDLOG_H_#define _CSPDLOG_H_#include "spdlog/spdlog.h"#include "spdlog/fmt/bin_to_hex.h"#include <memory>#include <string>...
spdlog 提供的工厂方法封装了 sink 的创建过程,也可以根据需要先创建 sink ,再创建 Logger。 创建Sink sink 是将日志实际写入其目标(文件、控制台、数据库等)的对象,且应仅负责单个目标。 创建控制台 sink auto sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>(); ...