// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "Logging.hpp" #include #include #if defined(_MSC_VER) #include #endif #if defined(__ANDROID__) #include #endif #include #include #include #include #include #include #include namespace armnnUtils { struct DebugOutputSink : boost::log::sinks::basic_formatted_sink_backend { 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); // Sets up 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 backend_t; boost::shared_ptr backend = boost::make_shared(); boost::shared_ptr> stream(&std::cout, boost::null_deleter()); backend->add_stream(stream); typedef boost::log::sinks::synchronous_sink sink_t; boost::shared_ptr standardOutputSink = boost::make_shared(backend); core->add_sink(standardOutputSink); } if (printToDebugOutput) { typedef boost::log::sinks::synchronous_sink sink_t; boost::shared_ptr debugOutputSink(new sink_t()); core->add_sink(debugOutputSink); } } }