журнал буста для глобальных переменных - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь использовать 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() {
}

но этот подход не работает. Кажется, здесь возникает проблема с глобальной инициализацией, но, может быть, вы могли бы придумать какую-то хитрость, чтобы заставить это работать. Перемещение глобальных переменных в какую-либо функцию запуска является своего рода решением (на самом деле огромными усилиями;), но интересно, может быть, есть способ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...