43 Json::CharReaderBuilder reader;
45 std::istringstream(msg) >> root;
51 std::cout <<
"_logger 空指针!!" << std::endl;
54 if (
_logger->getFormatter() ==
nullptr)
55 std::cout <<
"getFormatter 空指针!!" << std::endl;
62 std::vector<Xulog::LogSink::ptr> _sinks;
64 for (
auto sink : _sinks)
68 sink->log(str.c_str(), str.size());
77 static std::string
logMsg(std::vector<char> &msg,
bool *error_code)
81 while (offset < msg.size())
84 if (msg.size() <
sizeof(uint32_t))
90 ::memcpy(&sz_net, msg.data() + offset,
sizeof(uint32_t));
91 uint32_t sz = ntohl(sz_net);
93 if (offset +
sizeof(uint32_t) + sz > msg.size())
98 std::string jsonData(msg.begin() + offset +
sizeof(uint32_t), msg.begin() + offset +
sizeof(uint32_t) + sz);
100 offset += (
sizeof(uint32_t) + sz);
103 return std::string();
109 void init(std::vector<Xulog::LogSink::ptr> &sinks)
113 std::string cfg = config->get(
"StdoutSink",
"color");
116 else if (cfg ==
"false" || cfg ==
"default")
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));
125 cfg = config->get(
"RollBySize",
"path");
126 if (cfg ==
"default")
128 std::string sz = config->get(
"RollBySize",
"size");
129 if (sz.empty() || sz ==
"default")
131 int size = stoi(sz) * 1024;
132 sinks.push_back(std::make_shared<Xulog::RollSinkBySize>(
"./log/roll-", size));
134 else if (!cfg.empty())
136 std::string sz = config->get(
"RollBySize",
"size");
137 if (sz.empty() || sz ==
"default")
139 int size = stoi(sz) * 1024;
140 sinks.push_back(std::make_shared<Xulog::RollSinkBySize>(cfg, size));
143 cfg = config->get(
"RollByTime",
"path");
144 if (cfg ==
"default")
146 std::string tp = config->get(
"RollByTime",
"type");
147 if (tp ==
"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));
156 else if (!cfg.empty())
158 std::string tp = config->get(
"RollByTime",
"type");
159 if (tp ==
"GAP_MINUTE")
161 else if (tp ==
"GAP_HOUR")
163 else if (tp ==
"GAP_DAY")
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"));