aboutsummaryrefslogtreecommitdiff
path: root/src/armnnUtils/Logging.cpp
diff options
context:
space:
mode:
authortelsoa01 <telmo.soares@arm.com>2018-03-09 14:13:49 +0000
committertelsoa01 <telmo.soares@arm.com>2018-03-09 14:13:49 +0000
commit4fcda0101ec3d110c1d6d7bee5c83416b645528a (patch)
treec9a70aeb2887006160c1b3d265c27efadb7bdbae /src/armnnUtils/Logging.cpp
downloadarmnn-4fcda0101ec3d110c1d6d7bee5c83416b645528a.tar.gz
Release 18.02
Change-Id: Id3c11dc5ee94ef664374a988fcc6901e9a232fa6
Diffstat (limited to 'src/armnnUtils/Logging.cpp')
-rw-r--r--src/armnnUtils/Logging.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/armnnUtils/Logging.cpp b/src/armnnUtils/Logging.cpp
new file mode 100644
index 0000000000..95978d437e
--- /dev/null
+++ b/src/armnnUtils/Logging.cpp
@@ -0,0 +1,99 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// See LICENSE file in the project root for full license information.
+//
+#include "Logging.hpp"
+
+#include <string>
+#include <iostream>
+
+#if defined(_MSC_VER)
+#include <Windows.h>
+#endif
+
+#if defined(__ANDROID__)
+#include <android/log.h>
+#endif
+
+#include <boost/make_shared.hpp>
+#include <boost/log/core.hpp>
+#include <boost/log/sinks.hpp>
+#include <boost/log/sinks/debug_output_backend.hpp>
+#include <boost/log/sinks/basic_sink_backend.hpp>
+#include <boost/log/sinks/text_ostream_backend.hpp>
+#include <boost/log/utility/setup/console.hpp>
+
+namespace armnnUtils
+{
+
+struct DebugOutputSink : boost::log::sinks::basic_formatted_sink_backend<char, boost::log::sinks::concurrent_feeding>
+{
+ void consume(boost::log::record_view const& rec, std::string const& formatted_message)
+ {
+#if defined(_MSC_VER)
+ OutputDebugString(formatted_message.c_str());
+ OutputDebugString("\n");
+#endif
+#if defined(__ANDROID__)
+ __android_log_write(ANDROID_LOG_DEBUG, "armnn", formatted_message.c_str());
+#endif
+ }
+};
+
+void ConfigureLogging(boost::log::core* core, bool printToStandardOutput, bool printToDebugOutput,
+ armnn::LogSeverity severity)
+{
+ // Even if we remove all the sinks, Boost will fallback to the 'default sink' and still print stuff to
+ // stdout, so we have to explicitly disable logging in this case.
+ core->set_logging_enabled(printToStandardOutput || printToDebugOutput);
+
+ // Setup severity filter
+ boost::log::trivial::severity_level boostSeverity;
+ switch (severity)
+ {
+ case armnn::LogSeverity::Trace:
+ boostSeverity = boost::log::trivial::trace;
+ break;
+ case armnn::LogSeverity::Debug:
+ boostSeverity = boost::log::trivial::debug;
+ break;
+ case armnn::LogSeverity::Info:
+ boostSeverity = boost::log::trivial::info;
+ break;
+ case armnn::LogSeverity::Warning:
+ boostSeverity = boost::log::trivial::warning;
+ break;
+ case armnn::LogSeverity::Error:
+ boostSeverity = boost::log::trivial::error;
+ break;
+ case armnn::LogSeverity::Fatal:
+ boostSeverity = boost::log::trivial::fatal;
+ break;
+ default:
+ BOOST_ASSERT_MSG(false, "Invalid severity");
+ }
+ core->set_filter(boost::log::trivial::severity >= boostSeverity);
+
+ core->remove_all_sinks();
+ if (printToStandardOutput)
+ {
+ typedef boost::log::sinks::basic_text_ostream_backend<char> backend_t;
+ boost::shared_ptr<backend_t> backend = boost::make_shared<backend_t>();
+
+ boost::shared_ptr<std::basic_ostream<char>> stream(&std::cout, boost::null_deleter());
+ backend->add_stream(stream);
+
+ typedef boost::log::sinks::synchronous_sink<backend_t> sink_t;
+ boost::shared_ptr<sink_t> standardOutputSink = boost::make_shared<sink_t>(backend);
+
+ core->add_sink(standardOutputSink);
+ }
+ if (printToDebugOutput)
+ {
+ typedef boost::log::sinks::synchronous_sink<DebugOutputSink> sink_t;
+ boost::shared_ptr<sink_t> debugOutputSink(new sink_t());
+ core->add_sink(debugOutputSink);
+ }
+}
+
+}