sdplog只需直接加入到工程,指定路径,只需include头文件,可以直接使用,非常方便。
头文件:
#include "spdlog/spdlog.h"
#include "spdlog/sinks/rotating_file_sink.h"
//log
std::shared_ptr<spdlog::logger> m_pLogger;
cpp文件:
我希望每个log文件最大存储10M,然后写另外一个文件;
我还希望输出debug等级的log
我还希望不要缓冲,立即写入文件
我还希望。。。
//log 初始化
Create a file rotating logger with 10mb size max and 3 rotated files
m_pLogger = spdlog::rotating_logger_mt("1", "logs/log.txt", 1048576 * 10, 3);//多线程
//m_pLogger = spdlog::rotating_logger_st("8k", "logs/ymlog.txt", 1048576 * 10, 3);//单线程
//log内容直接写入,不要缓冲
m_pLogger->flush_on(spdlog::level::level_enum::debug);
//设置log level
m_pLogger->set_level(spdlog::level::level_enum::debug);
m_pLogger->info("... ... init ... ... \r\n");
如果想在error发生时,马上写入文件;但是info debug等,可以缓冲一下再写入
m_pLogger->flush_on(spdlog::level::level_enum::err);
简单的接口封装
#ifndef _COMMON_H_
#define _COMMON_H_
#include "spdlog/spdlog.h"
#include "spdlog/sinks/rotating_file_sink.h"
std::shared_ptr<spdlog::logger> g_logger;
void InitLog()
{
if(!g_logger)
{
//10M一个文件,最多存3个文件
g_logger = spdlog::rotating_logger_st("RTC","logs/rtclog.txt",1048576*10,3);
g_logger->set_level(spdlog::level::level_enum::debug);
//info日志,实时写入文件
g_logger->flush_on(spdlog::level::level_enum::info);
}
}
void UinitLog()
{
if(g_logger)
{
spdlog::drop_all();
}
}
//debug
#define LOG_D(...) SPDLOG_LOGGER_CALL(g_logger, spdlog::level::debug, __VA_ARGS__)
//info
#define LOG_I(...) SPDLOG_LOGGER_CALL(g_logger, spdlog::level::info, __VA_ARGS__)
//warn
#define LOG_W(...) SPDLOG_LOGGER_CALL(g_logger, spdlog::level::warn, __VA_ARGS__)
//error
#define LOG_E(...) SPDLOG_LOGGER_CALL(g_logger, spdlog::level::err, __VA_ARGS__)
#endif //_COMMON_H_