spdlog是一个用C++11编写的高性能日志库,官方文档是一个wiki page。
https://github.com/gabime/spdlog/wiki
Step 1 安装spdlog
spdlog的安装非常简单,从官网下载spdlog的代码。然后在你的工程中,头文件搜索路径包含spdlog的include路径就可以了。参看如下的CMakelists文件。
project (spdlog_tutorial)
cmake_minimum_required(VERSION 3.4)
set(CMAKE_CXX_STANDARD 11)
# 往工程中添加spdlog库,这个库是一个interface类型的库
add_library(spdlog INTERFACE)
# 包含这个interface库的工程路径
target_include_directories(
spdlog
INTERFACE
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/../spdlog-master/include>"
)
# spdlog会用到pthread库
find_package(Threads)
add_executable (spdlog_tutorial basic.cxx)
target_link_libraries(spdlog_tutorial spdlog ${CMAKE_THREAD_LIBS_INIT})
Step 2 创建一个控制台输出logger
参看如下的一段示例代码
#include <iostream>
#include "spdlog/spdlog.h"
int main(int, char* [])
{
auto console = spdlog::stdout_color_mt("console");
console->info("Welcome to spdlog");
console->info("An info message example {}..", 1);
}
spdlog::stdout_color_mt("console")
函数创建一个名字为console的console logger,把这个logger注册到spdlog的全局注册表中,并且返回指向这个logger的指针(shared_ptr
)。
编译运行一下试试。
Step 3 通过spdlog::get("...")来访问一个已经创建的logger
在之前代码的基础上添加一个新的类logger_get,参看如下代码
class logger_get
{
private:
std::shared_ptr<spdlog::logger> _logger;
public:
log_test()
{
_logger = spdlog::get("console");
}
void print_hello()
{
_logger->info("helloworld");
return;
}
};
然后在main函数中试着调用这个类
int main(int, char* [])
{
...
log_test test;
test.print_hello();
}
运行一下看看结果
Step 4 创建一个写入文件的logger
利用工厂函数spdlog::basic_logger_mt("logger_name", "filename.txt")
创建一个写入文件的logger
int main(int, char* [])
{
auto my_logger = spdlog::basic_logger_mt("basic_logger", "basic.txt");
for (int i = 0; i < 1000; i ++)
{
my_logger->info("Test File Logger {}", i);
}
}
运行一下看看,是不是都写到basic.txt这个文件下了。
Step 5 手动创建一个logger
int main(int, char* [])
{
auto sink = std::make_shared<spdlog::sinks::stdout_sink_mt>();
auto my_logger = std::make_shared<spdlog::logger>("mylogger", sink);
my_logger-> info("HelloWorld");
}
记住一个手动创建的logger通过Step3的函数没法儿访问,因为创建的过程中没有注册到spdlog里面。
可以通过spdlog::register_logger(my_logger)
函数来注册手动创建的logger
int main(int, char* [])
{
auto sink = std::make_shared<spdlog::sinks::stdout_sink_mt>();
auto my_logger = std::make_shared<spdlog::logger>("mylogger", sink);
my_logger-> info("HelloWorld");
spdlog::register_logger(my_logger);
auto test_logger = spdlog::get("mylogger");
test_logger->info("getlogger::helloworld");
}
Step 6 创建多个文件loggers,记录到相同的文件中
手动创建logger的时候可以配置多个loggers记录日志到相同的文件中,参看如下这段代码
int main(int, char* [])
{
auto sharedFileSink = std::make_shared<spdlog::sinks::simple_file_sink_mt>("basic.txt");
auto firstLogger = std::make_shared<spdlog::logger>("loggerOne", sharedFileSink);
auto secondLogger = std::make_shared<spdlog::logger>("loggerTwo", sharedFileSink);
for(int i = 0; i < 10; i ++)
{
firstLogger->info("[loggerOne]: Hello {}.", i);
}
for(int j = 0; j < 10; j ++)
{
secondLogger->info("[loggerTwo]: Hello {}. ", j);
}
}
网友评论