Я пытаюсь использовать boost для регистрации запуска глобальных объектов (несколько классов) и задаюсь вопросом, возможно ли это:
// logtest.h header file
BOOST_LOG_GLOBAL_LOGGER(my_logger, boost::log::sources::logger)
// source file
#include "logtest.h"
typedef boost::log::sinks::synchronous_sink
<boost::log::sinks::text_file_backend> tBoostSyncSinkFile;
typedef boost::log::sinks::synchronous_sink<
boost::log::sinks::text_ostream_backend> tBoostSyncSinkText;
BOOST_LOG_GLOBAL_LOGGER_INIT(my_logger, boost::log::sources::logger)
{
boost::log::sources::logger logger;
boost::shared_ptr<tBoostSyncSinkFile> sinkFile =
boost::make_shared<tBoostSyncSinkFile>(boost::log::keywords::file_name = "sample.log");
boost::shared_ptr<tBoostSyncSinkText> sinkText =
boost::make_shared<tBoostSyncSinkText>();
boost::shared_ptr<std::ostream> stream{ &std::clog, boost::empty_deleter{} };
sinkText->locked_backend()->add_stream(stream);
boost::log::core::get()->add_sink(sinkFile);
boost::log::core::get()->add_sink(sinkText);
return logger;
}
тогда какой-то класс:
class A {
public:
A() {
BOOST_LOG(my_logger::get()) << L"test log";
}
};
// global variable
A a;
void main() {
}
но этот подход не работает. Кажется, здесь возникает проблема с глобальной инициализацией, но, может быть, вы могли бы придумать какую-то хитрость, чтобы заставить это работать. Перемещение глобальных переменных в какую-либо функцию запуска является своего рода решением (на самом деле огромными усилиями;), но интересно, может быть, есть способ?