spdlog中各对象都分为多线程与单线程版本:
*_st
:单线程版本,不用加锁,效率更高。*_mt
:多线程版本,用于多线程程序是线程安全的。
spdlog是基于C++11实现的一款纯头文件的日志管理库
git地址:https://github.com/gabime/spdlog
下载链接
日志级别
error,warn,critical,info为不同等级的log,输出在控制台会以不同颜色表示
链接
spdlog---命名空间
logger---类--日志记录器
sink-----类-- 日志记录器槽
std::shared_ptr<logger> daily_logger_mt(..............){}
std::shared_ptr<logger> daily_logger_st(..............){}
template<typename Factory = spdlog::synchronous_factory>
inline std::shared_ptr<logger> daily_logger_format_mt(const std::string &logger_name, const filename_t &filename, int hour = 0,
int minute = 0, bool truncate = false, uint16_t max_files = 0, const file_event_handlers &event_handlers = {})
{
return Factory::template create<sinks::daily_file_format_sink_mt>(
logger_name, filename, hour, minute, truncate, max_files, event_handlers);
}
template<typename Factory = spdlog::synchronous_factory>
inline std::shared_ptr<logger> daily_logger_st(const std::string &logger_name, const filename_t &filename, int hour = 0, int minute = 0,
bool truncate = false, uint16_t max_files = 0, const file_event_handlers &event_handlers = {})
{
return Factory::template create<sinks::daily_file_sink_st>(logger_name, filename, hour, minute, truncate, max_files, event_handlers);
}
建立日志记录器对象,第一个参数是记录器的名字,第二个是记录日志的文件(指定路径)。
日志等级
enum level_enum { trace = SPDLOG_LEVEL_TRACE,//最低 debug = SPDLOG_LEVEL_DEBUG, info = SPDLOG_LEVEL_INFO, warn = SPDLOG_LEVEL_WARN, err = SPDLOG_LEVEL_ERROR, critical = SPDLOG_LEVEL_CRITICAL, off = SPDLOG_LEVEL_OFF,//最高 };
设置日志等级之后可以打印的日志等级最高位info,也就是debug和trace不打印
日志记录器的成员函数
set_pattern
设定日志输出时的格式
set_level
设置日志等级
info()
/*创建一个控制台对象*/
auto console = spdlog::stdout_color_mt("ybhy");
/*在控制台输出以下数据 -- 不同的等级有不同的颜色对应 :info、error、warn、critical*/
console->info("信息");
console->warn("警告");
console->error("错误");
console->critical("危险");
/*上面的另一种写法*/
spdlog::info("信息");
spdlog::warn("警告");
spdlog::error("错误");
spdlog::critical("危险");
spdlog::drop_all();
/*关闭所有logger对象*/
宏
日志文件的使用
三种创建日志文件的方式
链接
使用不同的方式创建logger对象,要包含不同的头文件:
#include "spdlog/sinks/rotating_file_sink.h"
#include "spdlog/sinks/daily_file_sink.h"
#include "spdlog/sinks/basic_file_sink.h"
创建日志记录器
创建日志记录器之后,利用日志等级函数写的日志数据就会写入到日志记录器对应的日志文件中,不再输出到控制台。
auto rotating_logger = spd::rotating_logger_mt("some_logger_name", "logs/rotating.txt", 256, 2);
for (int i = 0; i < 10; ++i)
rotating_logger->info("{} * {} equals {:>10}", i, i, i*i);