CMake
cmake_minimum_required(VERSION 3.11)
project(spdlog_example)
if(NOT TARGET spdlog)
find_package(spdlog REQUIRED)
endif()
add_executable(${PROJECT_NAME} spdlog_example.cc)
target_link_libraries(${PROJECT_NAME} PRIVATE spdlog::spdlog $<$<BOOL:${MINGW}>:ws2_32>)
日志等级
namespace level {
enum level_enum : int {
trace = SPDLOG_LEVEL_TRACE,
debug = SPDLOG_LEVEL_DEBUG,
info = SPDLOG_LEVEL_INFO,
warn = SPDLOG_LEVEL_WARN,
err = SPDLOG_LEVEL_ERROR,
critical = SPDLOG_LEVEL_CRITICAL,
off = SPDLOG_LEVEL_OFF,
n_levels
};
1. 简单输出日志
void load_levels_example() {
spdlog::cfg::load_env_levels();
}
int main(int , char* []) {
load_levels_example();
spdlog::info("This is spdlog version {}.{}.{}!", SPDLOG_VER_MAJOR, SPDLOG_VER_MINOR, SPDLOG_VER_PATCH);
spdlog::warn("Easy padding in numbers like {:08d}", 12);
spdlog::critical("Support for int: {0:d}, hex: {0:x}; oct: {0:o}; bin: {0:b}", 42);
spdlog::info("Support for floats {:03.2f}", 1.23456);
spdlog::info("Positional args are {1} {0}..", "too", "supported");
spdlog::info("{:>8} aligned, {:<8} aligned", "right", "left");
}

2. 输出指定等级之上的日志
int main(int , char* []) {
spdlog::set_level(spdlog::level::info);
spdlog::debug("This message should be dispalyed!");
spdlog::set_level(spdlog::level::trace);
spdlog::debug("This message should be displayed..");
}

3. 设置样式
int main(int, char* []) {
spdlog::set_pattern("[%H:%M:%S %z] [%^%L%$] [thread %t] %v");
spdlog::info("This an info message with custom format");
spdlog::set_pattern("%+");
spdlog::set_level(spdlog::level::info);
spdlog::enable_backtrace(10);
for (int i = 0; i < 100; i++) {
spdlog::debug("Backtrace message {}", i);
}
spdlog::dump_backtrace();
}

在终端(控制台输出)
int main() {
auto logger = spdlog::stdout_color_mt<spdlog::async_factory>("console logger");
logger->set_level(spdlog::level::info);
logger->info("console info log");
spdlog::get("console logger")->critical("console debug log");
// auto formatter = std::make_unique<spdlog::pattern_formatter>();
// formatter->set_pattern("[%n] [%*] [%^%l%$] %v");
// formatter->add_flag
// logger->set_formatter(std::move(formatter));
logger->warn("format warn log");
return 0;
}

自定义格式
class my_formatter_flag : public spdlog::custom_flag_formatter
{
public:
void format(const spdlog::details::log_msg &, const std::tm &, spdlog::memory_buf_t &dest) override
{
std::string some_txt = "mark-flag";
dest.append(some_txt.data(), some_txt.data() + some_txt.size());
}
std::unique_ptr<custom_flag_formatter> clone() const override
{
return spdlog::details::make_unique<my_formatter_flag>();
}
};
int main() {
spdlog::info("hello world");
auto logger = spdlog::stdout_color_mt<spdlog::async_factory>("console");
logger->info("hello world too!!");
spdlog::get("console")->info("hello world too too !!!");
auto sink1 = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
auto sink2 = std::make_shared<spdlog::sinks::basic_file_sink_mt>("mark.txt");
auto formatter = std::make_unique<spdlog::pattern_formatter>();
formatter->add_flag<my_formatter_flag>('*').set_pattern("[%D] [%n] [%*] %v");
sink1->set_formatter(std::move(formatter));
sink2->set_pattern("[%^%l%$] %v");
auto logger1 = std::make_shared<spdlog::logger>(std::string("console1"));
logger1->sinks().push_back(sink1);
logger1->sinks().push_back(sink2);
spdlog::register_logger(logger1);
}

写到文件
int main() {
spdlog::info("hello world");
auto logger = spdlog::stdout_color_mt<spdlog::async_factory>("console");
logger->info("hello world too!!");
spdlog::get("console")->info("hello world too too !!!");
auto sink1 = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
auto sink2 = std::make_shared<spdlog::sinks::basic_file_sink_mt>("mark.txt");
auto formatter = std::make_unique<spdlog::pattern_formatter>();
formatter->add_flag<my_formatter_flag>('*').set_pattern("[%D] [%n] [%*] %v");
sink1->set_formatter(std::move(formatter));
sink2->set_pattern("[%^%l%$] %v");
auto logger1 = std::make_shared<spdlog::logger>(std::string("console1"));
logger1->sinks().push_back(sink1);
logger1->sinks().push_back(sink2);
spdlog::register_logger(logger1);
spdlog::get("console1")->info("hello world too too too!!!!");
SPDLOG_INFO("hello mark too!");
SPDLOG_LOGGER_INFO(spdlog::get("console1"), "hello mark too too !!!");
}

评论