spdlog是一个非常快的日志类
*/
#include "spdlog/spdlog.h"
#include
#include
using std::cout;
using std::cin;
using std::endl;
void async_example();
namespace spd = spdlog;
int main(int argc,char * argv [ ])
{
try{
//创建标准输出日志
auto console = spd::stdout_logger_mt("console");
console->info("Welcome to spdlog!");
console->error("Some error message with arg{}..", 1);
//格式化输出的例子
console->warn("Easy padding in numbers like{:08d}", 12);
console->critical("Support for int: {0:d}; hex: {0:x}; oct:{0:o}; bin: {0:b}", 42);
console->info("Support for floats {:03.2f}", 1.23456);
console->info("Positinoal args are {1}{0}..", "too", "Supported");
console->info("{:<30}", "left aligned");
//可以用get从全局注册的地方获取想要的日志
spd::get("console")->info("loggers can be retrieved from a global registry using the spdlog::get(logger_name) function");
//创建日志文件
auto rotating_logger = spd::rotating_logger_mt("some_logger_name","logs/mylogfile",1048576 *5,3);
for (int i=0;i<10;i++){
rotating_logger->info("{} * {} equals {:>10}", i, i, i*i);
}
//定时创建日志文件
auto daily_logger = spd::daily_logger_mt("daily_logger","logs/daily",19,00);
daily_logger->info(123.44);
//自定义消息输出格式
spd::set_pattern("----[%Y-%m-%d %H:%M:%S %l] [thread %t] %v ----");
rotating_logger->info("This is another message with custom format");
//运行日志级别
spd::set_level(spd::level::info);
console->debug("This message should not be diaplayed!");
console->set_level(spd::level::debug);
console->debug("This message should be displayed..");
//异步模式非常快,只需调用spdlog::set_async_mode(q_size),然后创建的日志都将是异步的
async_example();
}
catch (const spd::spdlog_ex& ex){
cout << "Log init failed:" << ex.what() << endl;
return 1;
}
return 0;
}
void async_example(){
size_t q_size = 4096;//队列的大小必须是2的幂
spd::set_async_mode(q_size);
auto async_file = spd::daily_logger_st("async_file_logger", "logs/async_log.txt");
for (int i=0;i<100;i++){
async_file->info("Async message #{}", i);
}
}
c++高效、快速的日志类Spdlog
最新推荐文章于 2025-04-09 19:21:32 发布