log:spdlog设置文件和终端多接收器。
This commit is contained in:
parent
6c48169a79
commit
35ff2c3ebf
@ -1,7 +1,7 @@
|
|||||||
# .clang-format
|
# .clang-format
|
||||||
|
|
||||||
# 风格格式化
|
# 风格格式化
|
||||||
BasedOnStyle: LLVM
|
BasedOnStyle: Google
|
||||||
# 4 空格缩进
|
# 4 空格缩进
|
||||||
IndentWidth: 4
|
IndentWidth: 4
|
||||||
# 连续对齐变量的声明
|
# 连续对齐变量的声明
|
||||||
@ -17,22 +17,6 @@ BraceWrapping:
|
|||||||
AfterFunction: true
|
AfterFunction: true
|
||||||
# class定义后面
|
# class定义后面
|
||||||
AfterClass: true
|
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",
|
"stop_token": "cpp",
|
||||||
"thread": "cpp",
|
"thread": "cpp",
|
||||||
"bitset": "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(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${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/spdlog-1.13.0/include)
|
||||||
include_directories(3rd/asio-1.30.2/include)
|
include_directories(3rd/asio-1.30.2/include)
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 3.8)
|
|||||||
project (net_server)
|
project (net_server)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
|
||||||
include_directories(../net_com)
|
include_directories()
|
||||||
include_directories(../util)
|
include_directories(../util)
|
||||||
|
|
||||||
add_executable(net_server main.cpp
|
add_executable(net_server main.cpp
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
CNetServer::CNetServer()
|
CNetServer::CNetServer()
|
||||||
{
|
{
|
||||||
log_ = CNetPub::getInstance();
|
log_ = CLogger::getLogger();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetServer::run()
|
void CNetServer::run()
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#ifndef NET_SERVER_HEADER
|
#ifndef NET_SERVER_HEADER
|
||||||
#define NET_SERVER_HEADER
|
#define NET_SERVER_HEADER
|
||||||
|
|
||||||
#include "net_com.h"
|
#include "net_com/net_com.h"
|
||||||
#include "net_pub.h"
|
#include "util/net_pub.h"
|
||||||
|
|
||||||
class CNetServer
|
class CNetServer
|
||||||
{
|
{
|
||||||
@ -14,7 +14,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
CCommunicate communi_{};
|
CCommunicate communi_{};
|
||||||
NetLog log_{};
|
Log_t log_{};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,41 @@
|
|||||||
#include "net_pub.h"
|
#include "net_pub.h"
|
||||||
|
|
||||||
NetLog CNetPub::log_ = nullptr;
|
std::shared_ptr<CLogger> CLogger::logger_ = nullptr;
|
||||||
std::shared_ptr<std::mutex> CNetPub::mutex_ = std::make_shared<std::mutex>();
|
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
|
#define NET_PUB_HPP
|
||||||
|
|
||||||
#include <spdlog/sinks/rotating_file_sink.h>
|
#include <spdlog/sinks/rotating_file_sink.h>
|
||||||
|
#include <spdlog/sinks/stdout_color_sinks.h>
|
||||||
#include <spdlog/spdlog.h>
|
#include <spdlog/spdlog.h>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
typedef std::shared_ptr<spdlog::logger> NetLog;
|
class noncopyable
|
||||||
class CNetPub
|
{
|
||||||
|
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:
|
public:
|
||||||
static NetLog getInstance()
|
static Log_t getLogger();
|
||||||
{
|
|
||||||
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_;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static NetLog log_;
|
void init();
|
||||||
static std::shared_ptr<std::mutex> mutex_;
|
using CPtrLogger = std::shared_ptr<CLogger>;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static CPtrLogger logger_;
|
||||||
|
static std::mutex mutex_;
|
||||||
|
static Log_t log_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user