diff --git a/include/opendht/dht_proxy_server.h b/include/opendht/dht_proxy_server.h index 1614fca704f2dbddfa626908f0796eca7b16986e..c462a34c7ad49f9c4876b7343918e3dd7c060408 100644 --- a/include/opendht/dht_proxy_server.h +++ b/include/opendht/dht_proxy_server.h @@ -41,38 +41,43 @@ class opendht_logger_t { public: - opendht_logger_t(const dht::Logger &logger): - m_logger(logger) - {} + opendht_logger_t(std::shared_ptr<dht::Logger> logger = nullptr){ + if (logger) + m_logger = logger; + } template <typename Builder> void trace(Builder && msg_builder){ - m_logger.d("[restinio] %s", msg_builder().c_str()); + if (m_logger) + m_logger->d("[restinio] %s", msg_builder().c_str()); } template <typename Builder> void info(Builder && msg_builder){ - m_logger.d("[restinio] %s", msg_builder().c_str()); + if (m_logger) + m_logger->d("[restinio] %s", msg_builder().c_str()); } template <typename Builder> void warn(Builder && msg_builder){ - m_logger.w("[restinio] %s", msg_builder().c_str()); + if (m_logger) + m_logger->w("[restinio] %s", msg_builder().c_str()); } template <typename Builder> void error(Builder && msg_builder){ - m_logger.e("[restinio] %s", msg_builder().c_str()); + if (m_logger) + m_logger->e("[restinio] %s", msg_builder().c_str()); } private: - dht::Logger m_logger; + std::shared_ptr<dht::Logger> m_logger; }; using RestRouter = restinio::router::express_router_t<>; using RestRouterTraits = restinio::traits_t< restinio::asio_timer_manager_t, - opendht_logger_t, //restinio::single_threaded_ostream_logger_t, + opendht_logger_t, RestRouter>; using RequestStatus = restinio::request_handling_status_t; using ResponseByParts = restinio::chunked_output_t; @@ -101,7 +106,7 @@ public: * @note if the server fails to start (if port is already used or reserved), * it will fails silently */ - DhtProxyServer(std::shared_ptr<DhtRunner> dht, in_port_t port = 8000, const std::string& pushServer = "", const Logger& logger = {}); + DhtProxyServer(std::shared_ptr<DhtRunner> dht, in_port_t port = 8000, const std::string& pushServer = "", std::shared_ptr<dht::Logger> logger = nullptr); virtual ~DhtProxyServer(); DhtProxyServer(const DhtProxyServer& other) = delete; diff --git a/include/opendht/dhtrunner.h b/include/opendht/dhtrunner.h index 847952630dec780bd1b150b5adf78066904a03af..04eeb750d009879133a34a86883bcdeba061cbc6 100644 --- a/include/opendht/dhtrunner.h +++ b/include/opendht/dhtrunner.h @@ -64,7 +64,7 @@ public: }; struct Context { - std::unique_ptr<Logger> logger {}; + std::shared_ptr<Logger> logger {}; std::shared_ptr<PeerDiscovery> peerDiscovery {}; Context() {} }; diff --git a/src/dht_proxy_server.cpp b/src/dht_proxy_server.cpp index d04675e254a860870b3ce34966008ebab0165130..7696584ac0f1adb685ec15b6e24b236a8fcc3b19 100644 --- a/src/dht_proxy_server.cpp +++ b/src/dht_proxy_server.cpp @@ -51,7 +51,7 @@ constexpr const std::chrono::minutes PRINT_STATS_PERIOD {2}; constexpr const size_t IO_THREADS_MAX {64}; -DhtProxyServer::DhtProxyServer(std::shared_ptr<DhtRunner> dht, in_port_t port , const std::string& pushServer, const Logger &logger) +DhtProxyServer::DhtProxyServer(std::shared_ptr<DhtRunner> dht, in_port_t port , const std::string& pushServer, std::shared_ptr<dht::Logger> logger) : dht_(dht), threadPool_(new ThreadPool(IO_THREADS_MAX)), pushServer_(pushServer) { if (not dht_) @@ -69,7 +69,7 @@ DhtProxyServer::DhtProxyServer(std::shared_ptr<DhtRunner> dht, in_port_t port , jsonBuilder_["commentStyle"] = "None"; jsonBuilder_["indentation"] = ""; - server_thread = std::thread([this, port, &logger](){ + server_thread = std::thread([this, port, logger](){ using namespace std::chrono; auto maxThreads = std::thread::hardware_concurrency() - 1; auto restThreads = maxThreads > 1 ? maxThreads : 1; diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp index e70473a1d57f0a95669c9d5654f5163019fa06bc..68d87057461cedde3e84c9b43591d2e821ed67b1 100644 --- a/tools/dhtnode.cpp +++ b/tools/dhtnode.cpp @@ -537,6 +537,8 @@ main(int argc, char **argv) context.logger = log::getFileLogger(params.logfile); else context.logger = log::getStdLogger(); + } else { + context.logger = nullptr; } node->run(params.port, config, std::move(context)); @@ -551,7 +553,7 @@ main(int argc, char **argv) #endif if (params.proxyserver != 0) { #ifdef OPENDHT_PROXY_SERVER - proxies.emplace(params.proxyserver, std::unique_ptr<DhtProxyServer>(new DhtProxyServer(node, params.proxyserver, params.pushserver, *context.logger))); + proxies.emplace(params.proxyserver, std::unique_ptr<DhtProxyServer>(new DhtProxyServer(node, params.proxyserver, params.pushserver, context.logger))); #else std::cerr << "DHT proxy server requested but OpenDHT built without proxy server support." << std::endl; exit(EXIT_FAILURE);