log:spdlog设置文件和终端多接收器。

This commit is contained in:
taynpg 2024-06-30 13:26:26 +08:00
parent 6c48169a79
commit 35ff2c3ebf
8 changed files with 75 additions and 47 deletions

View File

@ -1,7 +1,7 @@
# .clang-format
# 风格格式化
BasedOnStyle: LLVM
BasedOnStyle: Google
# 4 空格缩进
IndentWidth: 4
# 连续对齐变量的声明
@ -17,22 +17,6 @@ BraceWrapping:
AfterFunction: true
# 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

View File

@ -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"
}
}

View File

@ -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)

View File

@ -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

View File

@ -2,7 +2,7 @@
CNetServer::CNetServer()
{
log_ = CNetPub::getInstance();
log_ = CLogger::getLogger();
}
void CNetServer::run()

View File

@ -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

View File

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

View File

@ -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