log-spdlog日志库

使用

stdafx.h 里面包含

#include <spdlog/spdlog.h>
#include <spdlog/sinks/rotating_file_sink.h>
extern std::shared_ptr<spdlog::logger> g_logger;

stdafx.cpp 里面包含
std::shared_ptr<spdlog::logger> g_logger;

// 初始化
// 如果存在会返回实例,否则返回空
g_logger = spdlog::get("IoTBackend");
if (g_logger == nullptr)
{
g_logger = spdlog::rotating_logger_mt("IoTBackend", m_curInfo.appPath + "IoTBackend.log", 1048576 * 100, 10);
g_logger->set_level(spdlog::level::level_enum(logLevel));
g_logger->flush_on(spdlog::level::level_enum(logLevel));
g_logger->info("logger is started.");
}
g_logger->info(APP_VERSION);

// 关闭

// Release and close all loggers
spdlog::drop_all();

或者单独drop某个logger
spd::drop("console");
spd::drop("basic_logger");

格式化

spdlog::info("Hello, {}!", "World");
logger->info("Hello {} {} !!", "param1", 123.4);

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");

条件输出

// trace=0 debug=1 info=2 warn=3 error=4 critical=5 off=6
g_logger->set_level(spdlog::level::trace);

m_pConf = confHelper::getInstance();
m_pConf->open(m_curInfo.appPath + "dev_noise_jnrs.json");
int32_t logLevel = m_pConf->readInt("logLevel");
g_logger->set_level(spdlog::level::level_enum(logLevel));
#include <spdlog/spdlog.h>
#include <spdlog/sinks/rotating_file_sink.h>

m_configPath = getAppPath() + _T("logs");

std::shared_ptr<spdlog::logger> m_logger;

if (FALSE == PathFileExists(m_configPath.c_str()))
{
// directory not exist
DWORD dwErrCode = GetLastError();
if (FALSE == CreateDirectory(m_configPath.c_str(), NULL))
{
OutputDebugString(L"videoHelper: 创建日志目录失败");
}
}

m_pConf = confHelper::getInstance();
m_pConf->open(m_curInfo.appPath + "dev_noise_jnrs.json");
int64_t logLevel = m_pConf->readInt("logLevel");

// 如果存在会返回实例,否则返回空
m_logger = spdlog::get("videoHelper");
if (m_logger == nullptr)
{
m_logger = spdlog::rotating_logger_mt("videoHelper", "c:/collectorShanghaiXiTongHa360ams.txt", 1048576 * 10, 3);
g_logger->set_level(spdlog::level::level_enum(logLevel));
g_logger->flush_on(spdlog::level::level_enum(logLevel));
m_logger->info("m_logger is started.");

}
// Create a file rotating logger with 10mb size max and 3 rotated files. 1048576*10
m_logger = spdlog::rotating_logger_mt("videoHelper", w2s(m_configPath) + "/videoHelperLog.txt", 1048576 * 10, 3);
// m_logger->info("Welcome to spdlog version {}.{}.{} !", SPDLOG_VER_MAJOR, SPDLOG_VER_MINOR, SPDLOG_VER_PATCH);
// m_logger->warn("Easy padding in numbers like {:08d}", 12);
// m_logger->critical("Support for int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}", 42);
// m_logger->info("Support for floats {:03.2f}", 1.23456);
// m_logger->info("Positional args are {1} {0}..", "too", "supported");
// m_logger->info("{:>8} aligned, {:<8} aligned", "right", "left");

m_logger->info("m_logger is started.");

释放

// Release and close all loggers
spdlog::drop_all();

或者单独drop某个logger
spd::drop("console");
spd::drop("basic_logger");

异步log

目前暂时未对性能造成影响,如果有影响了,可以使用这个看看

#include "spdlog/async.h"
void async_example()
{
// default thread pool settings can be modified *before* creating the async logger:
// spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1 backing thread.
auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_file_logger", "logs/async_log.txt");
// alternatively:
// auto async_file = spdlog::create_async<spdlog::sinks::basic_file_sink_mt>("async_file_logger", "logs/async_log.txt");

}