参考博客:
日志记录库 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() {
//文件sink
auto 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]");
//控制台sink
auto 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;
}