core: initialize Boost.Log backend through ndn-cxx
ndn-cxx logging facility and NFD logging both use Boost.Log.
When each of ndn-cxx and NFD adds a std::clog sink, messages are
appearing twice on OS X, resulting in scrambled log output.
This commit removes NFD's Boost.Log backend initialization and
let ndn-cxx logging facility initialize Boost.Log.
Change-Id: Ib25efe5c924d530424c275f9c8f168683f4ef039
Refs: #3761
diff --git a/core/logger-factory.cpp b/core/logger-factory.cpp
index aae7795..36ce5b3 100644
--- a/core/logger-factory.cpp
+++ b/core/logger-factory.cpp
@@ -24,10 +24,8 @@
*/
#include "logger-factory.hpp"
-
+#include <ndn-cxx/util/logging.hpp>
#include <boost/range/adaptor/map.hpp>
-#include <boost/log/core.hpp>
-#include <boost/log/expressions.hpp>
#ifdef HAVE_CUSTOM_LOGGER
#error "This file should not be compiled when custom logger is used"
@@ -56,20 +54,14 @@
m_levelNames["TRACE"] = LOG_TRACE;
m_levelNames["ALL"] = LOG_ALL;
- auto backend = boost::make_shared<boost::log::sinks::text_ostream_backend>();
- backend->auto_flush(true);
- backend->add_stream(boost::shared_ptr<std::ostream>(&std::clog, bind([]{})));
-
- m_sink = boost::make_shared<Sink>(backend);
- m_sink->set_formatter(boost::log::expressions::stream << boost::log::expressions::message);
- boost::log::core::get()->add_sink(m_sink);
+ // Let ndn-cxx logging facility initialize Boost.Log backend,
+ // so that only one sink is attached to Boost.Log core.
+ ndn::util::Logging::setDestination(std::clog);
}
LoggerFactory::~LoggerFactory()
{
- boost::log::core::get()->remove_sink(m_sink);
- m_sink->stop();
- m_sink->flush();
+ ndn::util::Logging::flush();
}
void
@@ -129,19 +121,19 @@
bool isDryRun,
const std::string& filename)
{
-// log
-// {
-// ; default_level specifies the logging level for modules
-// ; that are not explicitly named. All debugging levels
-// ; listed above the selected value are enabled.
-//
-// default_level INFO
-//
-// ; You may also override the default for specific modules:
-//
-// FibManager DEBUG
-// Forwarder WARN
-// }
+ // log
+ // {
+ // ; default_level specifies the logging level for modules
+ // ; that are not explicitly named. All debugging levels
+ // ; listed above the selected value are enabled.
+ //
+ // default_level INFO
+ //
+ // ; You may also override the default for specific modules:
+ //
+ // FibManager DEBUG
+ // Forwarder WARN
+ // }
if (!isDryRun) {
ConfigSection::const_assoc_iterator item = section.find("default_level");
@@ -193,7 +185,7 @@
void
LoggerFactory::flushBackend()
{
- m_sink->flush();
+ ndn::util::Logging::flush();
}
Logger&
diff --git a/core/logger-factory.hpp b/core/logger-factory.hpp
index e61d60f..5cafc64 100644
--- a/core/logger-factory.hpp
+++ b/core/logger-factory.hpp
@@ -35,7 +35,6 @@
#include "config-file.hpp"
#include "logger.hpp"
-#include <boost/log/sinks.hpp>
#include <mutex>
namespace nfd {
@@ -112,9 +111,6 @@
mutable std::mutex m_loggersGuard;
LogLevel m_defaultLevel;
-
- typedef boost::log::sinks::asynchronous_sink<boost::log::sinks::text_ostream_backend> Sink;
- boost::shared_ptr<Sink> m_sink;
};
inline LogLevel