#include <iostream>
#include <string>
#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/sinks/rotating_file_sink.h>
using namespace std;
#define log_path_address "D:\\ALearn\\work\\can_pro_work\\log\\test.log"
#define log_path_address2 "D:\\ALearn\\work\\can_pro_work\\log\\test1.txt"
//
int test01() {
// 创建控制台日志记录器,支持彩色输出
//使用 stdout_color_mt 创建一个支持多线程的彩色控制台日志记录器
auto console = spdlog::stdout_color_mt("console");
// 设置日志级别
//使用 spdlog::set_level() 设置全局日志级别,例如 info、warn、error 等
/*通过设置日志级别,只有高于或等于指定级别的日志信息才会被输出。例如,设置为 info 后:
info、warn、error 和 critical 级别的日志会被输出。
debug 和 trace 级别的日志将被忽略。*/
spdlog::set_level(spdlog::level::info); // 设置全局日志级别为 INFO
// 日志输出示例
/*spdlog::level::trace: 最详细的日志
spdlog::level::debug : 调试信息
spdlog::level::info : 一般信息
spdlog::level::warn : 警告
spdlog::level::err : 错误
spdlog::level::critical : 严重错误
spdlog::level::off : 关闭日志*/
console->info("Hello, {}!", "world");
console->warn("This is a warning message.");
console->error("This is an error message.");
return 1;
}
//记录在日志文件中
int test02() {
// 创建一个名为 "example_logger" 的日志记录器,日志将写入到 "example.log" 文件中
auto example_logger = spdlog::basic_logger_mt("example_logger", log_path_address);
// 设置日志级别为 info,低于此级别的日志(如 debug)将不会被记录
example_logger->set_level(spdlog::level::info);
// 设置日志格式
example_logger->set_pattern("[%T] %n: %v");
// 使用不同级别的日志记录
example_logger->info("这是一条信息日志");
example_logger->warn("这是一条警告日志");
example_logger->error("这是一条错误日志");
// 可以关闭日志记录器,虽然不是必须的,但是好的习惯
spdlog::shutdown();
return 1;
}
int test03() {
// 保留 1 个日志文件
// 每个日志文件最大大小
auto rotating_logger = spdlog::rotating_logger_mt("rotating_logger_example",
log_path_address,110,0);
// 设置日志级别为 info
rotating_logger->set_level(spdlog::level::trace);
// 设置日志格式
rotating_logger->set_pattern("[%T] %n: %v");
// 记录一些日志消息
for (int i = 0; i < 30; ++i){
rotating_logger->info("这是第 {} 条信息日志", i);
}
rotating_logger->flush();
// 关闭所有注册的日志记录器
spdlog::shutdown();
return 1;
}
int test04() {
// 创建旋转文件日志记录器,设置最大文件大小为 5 MB,保留 3 个文件
auto file_logger = spdlog::rotating_logger_mt("rotating_logger_example", log_path_address, 255,5);
// 创建控制台日志记录器,支持彩色输出
auto console_logger = spdlog::stdout_color_mt("console");
// 设置日志级别
spdlog::set_level(spdlog::level::info);
// 日志输出示例
for (int i = 0; i < 10000; ++i) {
file_logger->info("This is log message number {}", i);
console_logger->info("This is log message number {}", i);
}
return 0;
}
int test05() {
// 创建旋转文件日志记录器,设置最大文件大小为 5 MB,保留 3 个文件
auto file_logger = spdlog::rotating_logger_mt("rotating_logger_example", log_path_address, 5 * 1024 * 1024, 3);
// 创建控制台日志记录器,支持彩色输出
auto console_logger = spdlog::stdout_color_mt("console");
// 设置日志级别为 info
file_logger->set_level(spdlog::level::info);
console_logger->set_level(spdlog::level::info);
// 设置日志格式
file_logger->set_pattern("[%Y-%m-%d %H:%M:%S] [%n] [thread %t] %v");
console_logger->set_pattern("[%Y-%m-%d %H:%M:%S] [%n] [thread %t] %v");
// 记录一些日志消息
for (int i = 0; i < 10000; ++i) {
file_logger->info("This is log message number {}", i);
console_logger->info("This is log message number {}", i);
}
// 确保所有日志被写入
spdlog::shutdown();
return 1;
}
int main() {
test05();
}