2323#include " logger_config.h"
2424
2525#include < memcached/engine.h>
26+ #include < spdlog/async.h>
27+ #include < spdlog/async_logger.h>
28+ #include < spdlog/sinks/ansicolor_sink.h>
2629#include < spdlog/sinks/dist_sink.h>
2730#include < spdlog/sinks/null_sink.h>
31+ #include < spdlog/sinks/stdout_color_sinks.h>
2832#include < spdlog/sinks/stdout_sinks.h>
29- #include < spdlog/spdlog.h>
3033#include < chrono>
3134#include < cstdio>
32-
33- #ifndef WIN32
34- #include < spdlog/sinks/ansicolor_sink.h>
35-
36- #endif
37-
3835static const std::string logger_name{" spdlog_file_logger" };
3936
4037/* *
@@ -44,7 +41,7 @@ static const std::string logger_name{"spdlog_file_logger"};
4441 * TODO: Remove the duplication in the future, by (maybe) moving
4542 * the const to a header file.
4643 */
47- static const std::string log_pattern{" %Y-%m-%dT%T.%fZ %l %v" };
44+ static const std::string log_pattern{" %^% Y-%m-%dT%T.%fZ %l %v%$ " };
4845
4946/* *
5047 * Instances of spdlog (async) file logger.
@@ -132,12 +129,11 @@ boost::optional<std::string> cb::logger::initialize(
132129 }
133130
134131 if (logger_settings.console ) {
135- #ifdef WIN32
136- auto stderrsink = std::make_shared<spdlog::sinks::stderr_sink_mt>();
137- #else
138132 auto stderrsink =
139- std::make_shared<spdlog::sinks::ansicolor_stderr_sink_mt>();
140- #endif
133+ std::make_shared<spdlog::sinks::stderr_color_sink_mt>();
134+
135+ // Set the formatting pattern of this sink
136+ stderrsink->set_pattern (log_pattern);
141137 if (logger_settings.unit_test ) {
142138 stderrsink->set_level (spdlog::level::trace);
143139 } else {
@@ -147,25 +143,35 @@ boost::optional<std::string> cb::logger::initialize(
147143 }
148144
149145 spdlog::drop (logger_name);
146+
150147 if (logger_settings.unit_test ) {
151- file_logger = spdlog::create (logger_name, sink);
148+ file_logger = std::make_shared< spdlog::logger> (logger_name, sink);
152149 } else {
153- file_logger = spdlog::create_async (
150+ // Create the default thread pool for async logging
151+ spdlog::init_thread_pool (buffersz, 1 );
152+
153+ // Get the thread pool so that we can actually construct the
154+ // object with already created sinks...
155+ auto tp = spdlog::thread_pool ();
156+ file_logger = std::make_shared<spdlog::async_logger>(
154157 logger_name,
155158 sink,
156- buffersz,
157- spdlog::async_overflow_policy::block_retry,
158- nullptr ,
159- std::chrono::milliseconds (200 ));
159+ tp,
160+ spdlog::async_overflow_policy::block);
160161 }
162+
163+ file_logger->set_pattern (log_pattern);
164+ file_logger->set_level (logger_settings.log_level );
165+
166+ // Set the flushing interval policy
167+ spdlog::flush_every (std::chrono::seconds (1 ));
168+
169+ spdlog::register_logger (file_logger);
161170 } catch (const spdlog::spdlog_ex& ex) {
162171 std::string msg =
163172 std::string{" Log initialization failed: " } + ex.what ();
164173 return boost::optional<std::string>{msg};
165174 }
166-
167- file_logger->set_pattern (log_pattern);
168- file_logger->set_level (logger_settings.log_level );
169175 return {};
170176}
171177
@@ -174,24 +180,33 @@ spdlog::logger* cb::logger::get() {
174180}
175181
176182void cb::logger::reset () {
183+ spdlog::drop (logger_name);
177184 file_logger.reset ();
178185}
179186
180187void cb::logger::createBlackholeLogger () {
181188 // delete if already exists
182189 spdlog::drop (logger_name);
183190
184- file_logger = spdlog::create (
191+ file_logger = std::make_shared< spdlog::logger> (
185192 logger_name, std::make_shared<spdlog::sinks::null_sink_mt>());
186193
187194 file_logger->set_level (spdlog::level::off);
188195 file_logger->set_pattern (log_pattern);
196+
197+ spdlog::register_logger (file_logger);
189198}
190199
191200void cb::logger::createConsoleLogger () {
192201 // delete if already exists
193202 spdlog::drop (logger_name);
194- file_logger = spdlog::stderr_color_mt (logger_name);
203+
204+ auto stderrsink =
205+ std::make_shared<spdlog::sinks::ansicolor_stderr_sink_mt>();
206+
207+ file_logger = std::make_shared<spdlog::logger>(logger_name, stderrsink);
195208 file_logger->set_level (spdlog::level::info);
196209 file_logger->set_pattern (log_pattern);
210+
211+ spdlog::register_logger (file_logger);
197212}
0 commit comments