參考文檔:https://spdlog.docsforge.com/master/
spdlog簡介Very fast, header only, C++ logging library.一個header-only的C++日志庫,十分高效且易用 。
獲取安裝方式https://github.com/gabime/spdlog使用時只需要將git項目內的/include/spdlog文件夾整個放入項目的include目錄下即可
使用樣例#include "spdlog/spdlog.h"int main(){spdlog::info("Welcome to spdlog!");spdlog::error("Some error message with arg: {}", 1);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("{:<30}", "left aligned");spdlog::set_level(spdlog::level::debug); // Set global log level to debugspdlog::debug("This message should be displayed..");// change log patternspdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");// Compile time log levels// define SPDLOG_ACTIVE_LEVEL to desired levelSPDLOG_TRACE("Some trace message with param {}", 42);SPDLOG_DEBUG("Some debug message");}快速入門幾個核心概念
- logger:日志對象,每個日志內包含一個sink組成的vector,每個sink可以分別設置優先級,logger本身也可設置優先級
- sink:直譯是水槽,實際上是引流的對象或者可以認為是輸出目標,spdlog庫內置了多種不同類型的logger可供選擇
- formatter:格式化對象,絕大部分情況下spdlog默認的格式就足夠用了,但是如果有個性化需求,可以進行自定義格式
- level:日志級別,不同的日志庫可能會有不同的設置,但是基本情況下都會有debug、info、warn、error等的級別劃分來處理不同的情況,具體各個級別的情況可以根據自己的實際情況選取
std::shared_ptr<sink>組成,logger的每條日志都會調用sink對象,由sink對象按照formatter的格式輸出到sink指定的地方(有可能是控制臺、文件等),接下來我們從內到外的講解spdlog的這三個核心組件formatterformatter也即格式化對象,用于控制日志的輸出格式,spdlog自帶了默認的formatter,一般情況下,我們無需任何修改,直接使用即可 。注意,每個sink會有一個formatter
默認formatter默認formatter的格式為:[日期時間] [logger名] [log級別] log內容
[2022-10-13 17:00:55.795] [sidecar] [debug] found env KAFKA_PARTITION_VALUE : -1[2022-10-13 17:00:55.795] [sidecar_config] [debug] kafka_config.kafka_brokers : localhost:9092[2022-10-13 17:00:55.795] [sidecar_config] [debug] kafka_config.kafka_main_topic : workflow_queue[2022-10-13 17:00:55.795] [sidecar_config] [debug] kafka_config.kafka_partition_value : -1[2022-10-13 17:00:55.795] [sidecar] [info] SidecarConfig initialized自定義formatter如果默認的formatter不符合需求,可以自定義formatter,具體方式如下- set_parrtern(pattern_string);
- 例如:
- 全局級別的:spdlog::set_pattern(" [%H:%M:%S %z] [thread %t] %v ");
- 單個logger級別的:some_logger->set_parttern(">>> %H:%M:%S %z %v <<<");
- 單個sink級別的:some_sink-> set_parttern(".. %H: %M ..");其中用到了%H %M這些占位符,事實上它們都是預先設定好的,想要查看所有的占位符情況,可以參考以下網站:https://spdlog.docsforge.com/v1.x/3.custom-formatting/#pattern-flags
控制臺sinkspdlog中創建控制臺sink非常簡單,該方式創建的sink會輸出到命令行終端,且是彩色的(也可以選非彩色的,但是有彩色的應該都會選彩色的吧……) 。后綴的_mt代表多線程,_st代表單線程
經驗總結擴展閱讀
- 2023年2月10日放牧黃道吉日 2023年2月10日放牧好不好
- 2023年農歷正月廿十訓牛吉日 2023年2月10日訓牛好不好
- 一吹空調就打噴嚏是怎么回事 一直打噴嚏該怎么辦
- 原神深淵火法劇情講了什么
- 支付寶螞蟻莊園10月13日答案是什么
- 10月是什么節氣 十月份有哪些節氣
- 拼多多搖一搖8.8的紅包是真的嗎
- 電視劇面具背后劇情介紹?
- 電視劇麥香大結局是什么?
- 拼多多搖一搖8.8的紅包每個人都能搖到嗎
