LogSystem beta 1.4
This is a logging system project
 
载入中...
搜索中...
未找到
serverlog.hpp
浏览该文件的文档.
1
3#pragma once
4#include "../extend/DataBaseSink.hpp"
5#include "codec.hpp"
6#include "server.hpp"
7namespace XuServer
8{
12 {
13 public:
14 using ptr = std::shared_ptr<ServerLog>;
15
19 {
20 if (_log == nullptr)
21 _log = std::make_shared<ServerLog>();
22 return _log;
23 }
26 {
27 if (_builder == nullptr)
28 {
29 // 日志器配置
30 _builder = std::make_shared<Xulog::GlobalLoggerBuild>();
31 _builder->buildLoggerName("server");
32 _builder->buildFormatter();
33 _builder->buildLoggerType();
34 _builder->build();
35 }
36 }
39 void operator()(std::string &msg)
40 {
41 _logger = Xulog::getLogger("server");
42 // std::cout << _sinks.size() << std::endl;
43 Json::CharReaderBuilder reader;
44 Json::Value root;
45 std::istringstream(msg) >> root;
47 std::string str;
48 if (dmsg.msg_mod == "format")
49 {
50 if (_logger == nullptr)
51 std::cout << "_logger 空指针!!" << std::endl;
52 else
53 {
54 if (_logger->getFormatter() == nullptr)
55 std::cout << "getFormatter 空指针!!" << std::endl;
56 else
57 str = _logger->getFormatter()->Format(dmsg.format_msg);
58 }
59 }
60 else
61 str = dmsg.unformatted_msg;
62 std::vector<Xulog::LogSink::ptr> _sinks;
63 init(_sinks);
64 for (auto sink : _sinks)
65 {
66 DataBaseSink::DBptr dbptr = std::dynamic_pointer_cast<DataBaseSink>(sink);
67 if (dbptr == nullptr)
68 sink->log(str.c_str(), str.size());
69 else
70 dbptr->log(dmsg.format_msg);
71 }
72 }
77 static std::string logMsg(std::vector<char> &msg, bool *error_code)
78 {
80 size_t offset = 0;
81 while (offset < msg.size())
82 {
83
84 if (msg.size() < sizeof(uint32_t))
85 {
86 break; // 检查消息大小
87 }
88
89 uint32_t sz_net;
90 ::memcpy(&sz_net, msg.data() + offset, sizeof(uint32_t)); // 从正确的位置复制
91 uint32_t sz = ntohl(sz_net);
92
93 if (offset + sizeof(uint32_t) + sz > msg.size())
94 {
95 break;
96 }
97
98 std::string jsonData(msg.begin() + offset + sizeof(uint32_t), msg.begin() + offset + sizeof(uint32_t) + sz);
99 (*log)(jsonData);
100 offset += (sizeof(uint32_t) + sz);
101 }
102 msg.clear();
103 return std::string();
104 }
105
106 private:
109 void init(std::vector<Xulog::LogSink::ptr> &sinks)
110 {
112
113 std::string cfg = config->get("StdoutSink", "color");
114 if (cfg == "true")
115 sinks.push_back(std::make_shared<Xulog::StdoutSink>(Xulog::StdoutSink::Color::Enable));
116 else if (cfg == "false" || cfg == "default")
117 sinks.push_back(std::make_shared<Xulog::StdoutSink>(Xulog::StdoutSink::Color::Unenable));
118
119 cfg = config->get("FileSink", "path");
120 if (cfg == "default")
121 sinks.push_back(std::make_shared<Xulog::FileSink>("./log/test.log"));
122 else if (!cfg.empty())
123 sinks.push_back(std::make_shared<Xulog::FileSink>(cfg));
124
125 cfg = config->get("RollBySize", "path");
126 if (cfg == "default")
127 {
128 std::string sz = config->get("RollBySize", "size");
129 if (sz.empty() || sz == "default")
130 sz = "1024";
131 int size = stoi(sz) * 1024;
132 sinks.push_back(std::make_shared<Xulog::RollSinkBySize>("./log/roll-", size));
133 }
134 else if (!cfg.empty())
135 {
136 std::string sz = config->get("RollBySize", "size");
137 if (sz.empty() || sz == "default")
138 sz = "1024";
139 int size = stoi(sz) * 1024;
140 sinks.push_back(std::make_shared<Xulog::RollSinkBySize>(cfg, size));
141 }
142
143 cfg = config->get("RollByTime", "path");
144 if (cfg == "default")
145 {
146 std::string tp = config->get("RollByTime", "type");
147 if (tp == "GAP_MINUTE")
148 sinks.push_back(std::make_shared<RollSinkByTime>("./log/roll-", TimeGap::GAP_MINUTE));
149 else if (tp == "GAP_HOUR")
150 sinks.push_back(std::make_shared<RollSinkByTime>("./log/roll-", TimeGap::GAP_HOUR));
151 else if (tp == "GAP_DAY")
152 sinks.push_back(std::make_shared<RollSinkByTime>("./log/roll-", TimeGap::GAP_DAY));
153 else
154 sinks.push_back(std::make_shared<RollSinkByTime>("./log/roll-", TimeGap::GAP_SECOND));
155 }
156 else if (!cfg.empty())
157 {
158 std::string tp = config->get("RollByTime", "type");
159 if (tp == "GAP_MINUTE")
160 sinks.push_back(std::make_shared<RollSinkByTime>(cfg, TimeGap::GAP_MINUTE));
161 else if (tp == "GAP_HOUR")
162 sinks.push_back(std::make_shared<RollSinkByTime>(cfg, TimeGap::GAP_HOUR));
163 else if (tp == "GAP_DAY")
164 sinks.push_back(std::make_shared<RollSinkByTime>(cfg, TimeGap::GAP_DAY));
165 else
166 sinks.push_back(std::make_shared<RollSinkByTime>(cfg, TimeGap::GAP_SECOND));
167 }
168 cfg = config->get("DataBaseSink", "path");
169 if (cfg == "default")
170 sinks.push_back(std::make_shared<DataBaseSink>("./log/log.db", "server"));
171 else if (!cfg.empty())
172 sinks.push_back(std::make_shared<DataBaseSink>(cfg, "server"));
173 }
174
175 private:
176 static std::shared_ptr<Xulog::LoggerBuilder> _builder;
177 static ptr _log;
178
180 };
182 std::shared_ptr<Xulog::LoggerBuilder> ServerLog::_builder = nullptr;
183}
std::shared_ptr< DataBaseSink > DBptr
数据库落地操作句柄
Definition DataBaseSink.hpp:112
std::shared_ptr< Config > ptr
配置管理句柄
Definition config.hpp:26
static Config::ptr getInstance()
获取配置文件操作句柄
Definition config.hpp:40
服务器实际执行落地的类
Definition serverlog.hpp:12
static std::shared_ptr< Xulog::LoggerBuilder > _builder
日志构造器
Definition serverlog.hpp:176
std::shared_ptr< ServerLog > ptr
服务器实际落地操作句柄
Definition serverlog.hpp:14
static ptr _log
服务器实际落地操作句柄
Definition serverlog.hpp:177
Xulog::Logger::ptr _logger
日志器句柄
Definition serverlog.hpp:179
static ptr getInstance()
获取服务器落地操作句柄
Definition serverlog.hpp:18
void init(std::vector< Xulog::LogSink::ptr > &sinks)
初始化落地方式
Definition serverlog.hpp:109
static std::string logMsg(std::vector< char > &msg, bool *error_code)
服务器收到消息的处理回调函数
Definition serverlog.hpp:77
ServerLog()
构造函数
Definition serverlog.hpp:25
void operator()(std::string &msg)
仿函数
Definition serverlog.hpp:39
static DeliverMsg fromJson(const Json::Value &json)
将Json信息反序列化为传递消息
Definition codec.hpp:51
std::shared_ptr< Logger > ptr
Definition logger.hpp:44
对日志信息进行序列化和反序列化
Definition config.hpp:9
Logger::ptr getLogger(const std::string &name)
获取指定名称的日志器
Definition Xulog.h:21
TCP服务器
传递的消息
Definition codec.hpp:18
std::string unformatted_msg
非结构化消息
Definition codec.hpp:20
std::string msg_mod
消息模式
Definition codec.hpp:19
LogMsg format_msg
结构化信息
Definition codec.hpp:21