42 lines
1.2 KiB
C++
42 lines
1.2 KiB
C++
#include "net_pub.h"
|
|
|
|
std::shared_ptr<CLogger> CLogger::logger_ = nullptr;
|
|
Log_t CLogger::log_ = nullptr;
|
|
|
|
std::mutex CLogger::mutex_;
|
|
|
|
Log_t CLogger::getLogger()
|
|
{
|
|
if (logger_ == nullptr) {
|
|
mutex_.lock();
|
|
if (logger_ == nullptr) {
|
|
logger_ = std::make_shared<CLogger>();
|
|
logger_->init();
|
|
}
|
|
mutex_.unlock();
|
|
}
|
|
return logger_->log_;
|
|
}
|
|
|
|
void CLogger::init()
|
|
{
|
|
// 创建控制台接收器
|
|
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
|
|
console_sink->set_level(spdlog::level::debug);
|
|
console_sink->set_pattern("[console] [%^%l%$] %v");
|
|
|
|
// 创建文件接收器
|
|
auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(
|
|
"logs/nettrans.log", 1024 * 100, 5);
|
|
file_sink->set_level(spdlog::level::debug);
|
|
file_sink->set_pattern("[file] [%^%l%$] %v");
|
|
|
|
// 创建多接收器日志器
|
|
std::vector<spdlog::sink_ptr> sinks{console_sink, file_sink};
|
|
log_ = std::make_shared<spdlog::logger>("multi_sink", sinks.begin(),
|
|
sinks.end());
|
|
spdlog::register_logger(log_);
|
|
log_->set_level(spdlog::level::debug);
|
|
log_->set_pattern("[%H:%M:%S %z] [%n] [%^%l%$] %v");
|
|
}
|