log:spdlog设置文件和终端多接收器。
This commit is contained in:
parent
6c48169a79
commit
35ff2c3ebf
@ -1,7 +1,7 @@
|
||||
# .clang-format
|
||||
|
||||
# 风格格式化
|
||||
BasedOnStyle: LLVM
|
||||
BasedOnStyle: Google
|
||||
# 4 空格缩进
|
||||
IndentWidth: 4
|
||||
# 连续对齐变量的声明
|
||||
@ -18,21 +18,5 @@ BraceWrapping:
|
||||
# class定义后面
|
||||
AfterClass: true
|
||||
|
||||
# 去除C++11的列表初始化的大括号{后和}前的空格
|
||||
Cpp11BracedListStyle: true
|
||||
# 允许重新排版注释
|
||||
ReflowComments: true
|
||||
# 允许排序#include
|
||||
SortIncludes: true
|
||||
# 在尾随的评论前添加的空格数(只适用于//)
|
||||
SpacesBeforeTrailingComments: 3
|
||||
# tab宽度
|
||||
TabWidth: 4
|
||||
# 构造函数的初始化列表要么都在同一行,要么都各自一行
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
# 每行字符的限制,0表示没有限制
|
||||
ColumnLimit: 150
|
||||
# 允许短的块放在同一行
|
||||
AllowShortBlocksOnASingleLine: false
|
||||
# 是否允许短函数在一行
|
||||
AllowShortFunctionsOnASingleLine: InlineOnly
|
||||
AllowShortFunctionsOnASingleLine: None
|
9
.vscode/settings.json
vendored
9
.vscode/settings.json
vendored
@ -111,6 +111,13 @@
|
||||
"stop_token": "cpp",
|
||||
"thread": "cpp",
|
||||
"bitset": "cpp",
|
||||
"variant": "cpp"
|
||||
"variant": "cpp",
|
||||
"any": "cpp",
|
||||
"condition_variable": "cpp",
|
||||
"csignal": "cpp",
|
||||
"cstdarg": "cpp",
|
||||
"deque": "cpp",
|
||||
"future": "cpp",
|
||||
"shared_mutex": "cpp"
|
||||
}
|
||||
}
|
@ -29,6 +29,7 @@ message(STATUS "Compiler CXX ID: ${CMAKE_CXX_COMPILER_ID}")
|
||||
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
|
||||
|
||||
include_directories(${CMAKE_SOURCE_DIR})
|
||||
include_directories(3rd/spdlog-1.13.0/include)
|
||||
include_directories(3rd/asio-1.30.2/include)
|
||||
|
||||
|
@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 3.8)
|
||||
project (net_server)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
|
||||
include_directories(../net_com)
|
||||
include_directories()
|
||||
include_directories(../util)
|
||||
|
||||
add_executable(net_server main.cpp
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
CNetServer::CNetServer()
|
||||
{
|
||||
log_ = CNetPub::getInstance();
|
||||
log_ = CLogger::getLogger();
|
||||
}
|
||||
|
||||
void CNetServer::run()
|
||||
|
@ -1,8 +1,8 @@
|
||||
#ifndef NET_SERVER_HEADER
|
||||
#define NET_SERVER_HEADER
|
||||
|
||||
#include "net_com.h"
|
||||
#include "net_pub.h"
|
||||
#include "net_com/net_com.h"
|
||||
#include "util/net_pub.h"
|
||||
|
||||
class CNetServer
|
||||
{
|
||||
@ -14,7 +14,7 @@ public:
|
||||
|
||||
private:
|
||||
CCommunicate communi_{};
|
||||
NetLog log_{};
|
||||
Log_t log_{};
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -1,4 +1,41 @@
|
||||
#include "net_pub.h"
|
||||
|
||||
NetLog CNetPub::log_ = nullptr;
|
||||
std::shared_ptr<std::mutex> CNetPub::mutex_ = std::make_shared<std::mutex>();
|
||||
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");
|
||||
}
|
||||
|
@ -2,35 +2,34 @@
|
||||
#define NET_PUB_HPP
|
||||
|
||||
#include <spdlog/sinks/rotating_file_sink.h>
|
||||
#include <spdlog/sinks/stdout_color_sinks.h>
|
||||
#include <spdlog/spdlog.h>
|
||||
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
|
||||
typedef std::shared_ptr<spdlog::logger> NetLog;
|
||||
class CNetPub
|
||||
class noncopyable
|
||||
{
|
||||
protected:
|
||||
noncopyable() = default;
|
||||
noncopyable(const noncopyable&) = delete;
|
||||
noncopyable& operator=(const noncopyable&) = delete;
|
||||
};
|
||||
|
||||
typedef std::shared_ptr<spdlog::logger> Log_t;
|
||||
class CLogger : public noncopyable
|
||||
{
|
||||
public:
|
||||
static NetLog getInstance()
|
||||
{
|
||||
if (log_) {
|
||||
return log_;
|
||||
}
|
||||
mutex_->lock();
|
||||
if (log_) {
|
||||
mutex_->unlock();
|
||||
return log_;
|
||||
}
|
||||
log_ = spdlog::rotating_logger_mt("nettrans", "log/nettrans.log", 1024 * 100, 5);
|
||||
log_->set_pattern("[%Y-%m-%d %H:%M:%S.%e][%l]: %v");
|
||||
log_->set_level(spdlog::level::info);
|
||||
mutex_->unlock();
|
||||
return log_;
|
||||
}
|
||||
static Log_t getLogger();
|
||||
|
||||
private:
|
||||
static NetLog log_;
|
||||
static std::shared_ptr<std::mutex> mutex_;
|
||||
void init();
|
||||
using CPtrLogger = std::shared_ptr<CLogger>;
|
||||
|
||||
private:
|
||||
static CPtrLogger logger_;
|
||||
static std::mutex mutex_;
|
||||
static Log_t log_;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user