参考博客:
日志记录库 spdlog 基础使用_spdlog 写日志-CSDN博客
GitHub - gabime/spdlog: Fast C++ logging library.
首先在github上下载spdlog源码,不想编译成库的话,可以直接使用源码,将include文件夹下的spdlog文件夹,拷贝至代码所在路径,然后配置包含目录为代码所在目录。
其他注意事项:
flag meaning example
%v 日志内容 “my log test content”
%t 线程ID “123”
%P 进程ID “234”
%n 记录器Logger名 “basicLogger”
%l 日志级别 “debug”, “info”, etc
%L 日志级别简称 “D”, “I”, etc
%a 星期几(简称) “Thu”
%A 星期几 “Thursday”
%b 月份简称 “Aug”
%B 月份 “August”
%c 日期时间 “Thu Aug 23 15:35:46 2014”
%C 年(两位) “14”
%Y 年 “2014”
%D %x 日期简写 “08/23/14”
%m 月份(数字) “11”
%d 日(数组) “29”
%H 小时(24制) “23”
%I 小时(12制) “11”
%M 分钟 “59”
%S 秒 “58”
%e 毫秒 “678”
%f 微秒 “056789”
%F 纳秒 “256789123”
%p AM/PM “AM”
%r 时间(12制) “02:55:02 pm”
%R 时分(24制) “23:55”
%T %X 时间(24制) “23:55:59”
%z 时区(偏移) “+02:00”
%E epoch(秒) “1528834770”
%% 百分号 “%”
%+ 默认格式 “[2014-10-31 23:46:59.678] [mylogger] [info] Some message”
%^ start color range (can be used only once) “[mylogger] [info(green)] Some message”
%$ end color range (for example %^[+++]%$ %v) (can be used only once) [+++] Some message
%@ 文件名与行数 my_file.cpp:123
%s 文件名 my_file.cpp
%g 文件名(含路径) /some/dir/my_file.cpp
%# 行数 123
%! 函数名 my_func
%o 相对上一条记录的时间间隔(毫秒) 456
%i 相对上一条记录的时间间隔(微秒) 456
%u 相对上一条记录的时间间隔(纳秒) 11456
%O 相对上一条记录的时间间隔(秒) 4
#include <spdlog/spdlog.h>
#include <spdlog/sinks/rotating_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>void init_logging()
{spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%t] [%l] %v");//大于等于该等级的将被输出//spdlog::set_level(spdlog::level::info);spdlog::info("Hello, spdlog!");spdlog::trace("trace信息");spdlog::debug("debug信息");spdlog::info("info信息");spdlog::warn("warn信息");spdlog::error("error信息");spdlog::critical("critical信息");
}void testSpdLog() {// 文件日志定义,设定日志最大100M,且最多保留10个auto fileLogger = spdlog::rotating_logger_mt("fileLogger", "log.log", 1024 * 1024 * 100, 10);//大于等于该等级的将被输出fileLogger->set_level(spdlog::level::trace);//定义输出格式spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] [%s->%!->%#] [%v]"); //log类型 文件->函数名->行数 输出内容spdlog::set_default_logger(fileLogger);for (int i = 0; i < 2; ++i) {SPDLOG_LOGGER_TRACE(fileLogger, "trace输出:{}-{}", i, "测试trace");SPDLOG_LOGGER_DEBUG(fileLogger, "debug输出:{}-{}", i, "测试debug");SPDLOG_LOGGER_INFO(fileLogger, "info输出:{}-{}", i, "测试info");SPDLOG_LOGGER_WARN(fileLogger, "warn输出:{}-{}", i, "测试warn");SPDLOG_LOGGER_ERROR(fileLogger, "Some error message");SPDLOG_LOGGER_CRITICAL(fileLogger, "Some critical message");}
}void testMultiLog() {//文件sinkauto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_st>("logs.log", 1024 * 1024 * 100, 10);file_sink->set_level(spdlog::level::debug);file_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] [%s->%!->%#] [%v]");//控制台sinkauto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_st>();console_sink->set_level(spdlog::level::debug);console_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] [%s->%!->%#] [%v]");std::vector<spdlog::sink_ptr> sinks;sinks.push_back(console_sink);sinks.push_back(file_sink);auto multiLogger = std::make_shared<spdlog::logger>("multiSink", begin(sinks), end(sinks));multiLogger->set_level(spdlog::level::debug);spdlog::set_default_logger(multiLogger);for (int i = 0; i < 2; ++i) {SPDLOG_LOGGER_TRACE(multiLogger, "trace输出:{}-{}", i, "测试trace");SPDLOG_LOGGER_DEBUG(multiLogger, "debug输出:{}-{}", i, "测试debug");SPDLOG_LOGGER_INFO(multiLogger, "info输出:{}-{}", i, "测试info");SPDLOG_LOGGER_WARN(multiLogger, "warn输出:{}-{}", i, "测试warn");SPDLOG_LOGGER_ERROR(multiLogger, "Some error message");SPDLOG_LOGGER_CRITICAL(multiLogger, "Some critical message");}
}int main()
{//init_logging();//testSpdLog();testMultiLog();return 0;
}