Я просматривал учебные пособия и документацию Boost.Log, и во всех примерах они ссылаются на «окно отладчика» или «окно вывода отладки», но я не смог найти, что это такое. Это какое-то отдельное приложение? Где тогда скачать?
что такое окно вывода отладки журнала Boost?
Ответы:
Просто предположение: это, вероятно, означает «выходное» окно IDE, то есть Visual Studios или Eclipses «Выходное» окно.
прежде чем вызывать метод журнала повышения, убедитесь, что вы настроили приемник, а это означает, что вам нужно вызвать что-то вроде этого:
static void init_log(void)
{
/* init boost log
* 1. Add common attributes
* 2. set log filter to trace
*/
boost::log::add_common_attributes();
boost::log::core::get()->add_global_attribute("Scope",
boost::log::attributes::named_scope());
boost::log::core::get()->set_filter(
boost::log::trivial::severity >= boost::log::trivial::trace
);
/* log formatter:
* [TimeStamp] [ThreadId] [Severity Level] [Scope] Log message
*/
auto fmtTimeStamp = boost::log::expressions::
format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S.%f");
auto fmtThreadId = boost::log::expressions::
attr<boost::log::attributes::current_thread_id::value_type>("ThreadID");
auto fmtSeverity = boost::log::expressions::
attr<boost::log::trivial::severity_level>("Severity");
auto fmtScope = boost::log::expressions::format_named_scope("Scope",
boost::log::keywords::format = "%n(%f:%l)",
boost::log::keywords::iteration = boost::log::expressions::reverse,
boost::log::keywords::depth = 2);
boost::log::formatter logFmt =
boost::log::expressions::format("[%1%] (%2%) [%3%] [%4%] %5%")
% fmtTimeStamp % fmtThreadId % fmtSeverity % fmtScope
% boost::log::expressions::smessage;
/* console sink */
auto consoleSink = boost::log::add_console_log(std::clog);
consoleSink->set_formatter(logFmt);
/* fs sink */
auto fsSink = boost::log::add_file_log(
boost::log::keywords::file_name = "test_%Y-%m-%d_%H-%M-%S.%N.log",
boost::log::keywords::rotation_size = 10 * 1024 * 1024,
boost::log::keywords::min_free_space = 30 * 1024 * 1024,
boost::log::keywords::open_mode = std::ios_base::app);
fsSink->set_formatter(logFmt);
fsSink->locked_backend()->auto_flush(true);
}
выше приведен фрагмент, найденный здесь: Простой пример журнала Boost
Когда вы хотите что-то зарегистрировать, вы пишете что-то вроде этого:
BOOST_LOG_TRIVIAL(error) << "{ ERROR } Trying to bla bla bla\n";
BOOST_LOG_TRIVIAL(warning) << "{ WARNING } bla bla bla\n";
Результат будет найден в вашей папке отладки при работе в режиме отладки. Будет создан файл следующего вида:
test_2018-04-09_20-08-12.0.log
Вывод не будет отображаться в окне вывода отладки Visual Studio.
Если вы не хотите регистрироваться в файле, а просто войти в окно отладки, используйте что-то вроде этого:
OutputDebugString(L"This is an output");
или добавить один дополнительный приемник в init_log - вот так:
/* setup logging to debugger window */
// Complete sink type
boost::shared_ptr< boost::log::core > core = boost::log::core::get();
// Create the sink. The backend requires synchronization in the frontend.
boost::shared_ptr< sink_t > sink(new sink_t());
// Set the special filter to the frontend
// in order to skip the sink when no debugger is available
sink->set_filter(boost::log::expressions::is_debugger_present());
core->add_sink(sink);
вам также нужно добавить это:
#include <boost/log/sinks/debug_output_backend.hpp>
#include <boost/log/sinks/event_log_backend.hpp>
#include <boost/thread/future.hpp>
typedef boost::log::sinks::synchronous_sink<boost::log::sinks::debug_output_backend> sink_t;
Затем вывод также будет отображаться в окне отладчика.
Одним из внутренних серверов приемника boost.log является серверная часть отладчика, использующая Windows DebugOutputString.
Отличная отдельная программа, отображающая эти сообщения, — SysInternals' DbgView (debug-view), хотя IDE обычно тоже их отображает.
sink_t
typedef выбирает серверную часть и используется в коротком init_logging()
фрагменте кода. 11.04.2018