前提在ubuntu16上安装了spdlog
示例代码结构
- logger.cpp
#include "logger.h"
void LoggerInit()
{
// 按文件大小
//auto file_logger = spdlog::rotating_logger_mt("daily_logger", "logs/log.txt", 1024 * 1024 * 20, 5);
// 每天2:30 am 新建一个日志文件
auto logger = spdlog::daily_logger_mt("daily_logger", "../LogFolder/logs/daily.txt", 11, 52);
// 遇到warn级别以上的日志进行持久化,防止日志丢失
logger->flush_on(spdlog::level::warn);
//日志每3秒钟向磁盘持久化
spdlog::flush_every(std::chrono::seconds(3));
// 设置默认的logger
auto console = spdlog::stdout_color_mt("console");
spdlog::set_default_logger(console);
// 设置日志输出级别
spdlog::set_level(spdlog::level::info);
// 设置日志格式
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S][%l][%s:%#] %v");
}
void LoggerDrop()
{
spdlog::drop_all();
}
- example1.cpp
// https://www.cnblogs.com/spxie/p/15571535.html#:~:text=Spdlog%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%20%28%E5%8C%85%E5%90%ABCmake%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B%29%201%201.%E5%B7%A5%E7%A8%8B%E5%8A%A0%E5%85%A5include%E5%8F%8Alib%E8%B7%AF%E5%BE%84%2C%20%E5%B9%B6%E4%B8%94%20lib%E4%B8%AD%E5%8A%A0%E5%85%A5spdlog%20include%E8%B7%AF%E5%BE%84%3A%20%2Froot%2Fspdlog%2Finclude,2.%E5%8A%A0%E5%85%A5%E5%A4%B4%E6%96%87%E4%BB%B6logger.h%20...%203%203.%E5%8A%A0%E5%85%A5cpp%E6%96%87%E4%BB%B6logger.cpp%20...%204%204.%E4%BD%BF%E7%94%A8%20
#include "logger.h"
int main(){
LoggerInit();
int usFlagCPI = 4;
int diff(10);
INFO("Push a cpi data!PluseNum is:{},SignalPreProc time is:{}ms",usFlagCPI,diff);
LoggerDrop();
}
- logger.h
#ifndef LOGGER_H_
#define LOGGER_H_
#include "spdlog/spdlog.h"
#include "spdlog/sinks/rotating_file_sink.h"
#include "spdlog/sinks/daily_file_sink.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include <iostream>
#include <memory>
// spd带行号的打印,同时输出控制台和文件(定义三级日志等级)
#define INFO(...) SPDLOG_LOGGER_INFO(spdlog::default_logger_raw(), __VA_ARGS__);SPDLOG_LOGGER_INFO(spdlog::get("daily_logger"), __VA_ARGS__)
#define WARN(...) SPDLOG_LOGGER_WARN(spdlog::default_logger_raw(), __VA_ARGS__);SPDLOG_LOGGER_WARN(spdlog::get("daily_logger"), __VA_ARGS__)
#define ERROR(...) SPDLOG_LOGGER_ERROR(spdlog::default_logger_raw(), __VA_ARGS__);SPDLOG_LOGGER_ERROR(spdlog::get("daily_logger"), __VA_ARGS__)
//set_level 设置日志级别
// typedef enum
// {
// trace = 0,
// debug = 1,
// info = 2,
// warn = 3,
// err = 4,
// critical = 5,
// off = 6
// } level_enum;
extern void LoggerInit();
extern void LoggerDrop();
#endif /*LOGGER_H_ */
- CMakeLists.txt
make_minimum_required(VERSION 3.10)
project(spdlog_examples CXX)
set(SPDLOG_DIR ${CMAKE_SOURCE_DIR})
include_directories(${SPDLOG_DIR}/include)
set(CMAKE_CXX_STANDARD 11)
find_package(spdlog REQUIRED)
# add_executable(example example.cpp)
# target_link_libraries(example PRIVATE spdlog::spdlog) # 依赖了spdlog::spdlog,即spdlog,即静态库
add_executable(example1 ./src/example1.cpp ./src/logger.cpp)
target_link_libraries(example1 PRIVATE spdlog::spdlog) # 依赖了spdlog::spdlog,即spdlog,即静态库