Boost::log со статическими фабричными методами

Я пытаюсь реализовать ведение журнала с помощью библиотеки boost::log. Я объявил регистраторы как частные члены класса, но столкнулся с проблемой, когда пришел к классу со статическим фабричным методом. Сообщение об ошибке: недопустимое использование члена MyObjectContainer::slg в статической функции-члене. Я хочу избежать глобальных регистраторов, есть ли другое решение?

Заранее спасибо.


person Loevinnen    schedule 25.02.2014    source источник


Ответы (1)


Есть несколько решений.

1) Вы можете использовать локальную переменную в своей статической функции. Как это:

void MyClass::MyStaticmemberFunction()
{
    boost::log::sources::logger my_logger;
    BOOST_LOG(my_logger) << "log message.";
}

2) Вы можете передать указатель на объект класса в качестве параметра функции. В этом случае вы также должны добавить в свой класс функцию «получить». Как это:

// regular member function (not static) - "get function"
boost::log::sources::logger_mt MyClass::GetLogger()
{
    return m_member_logger;
}

void MyClass::MyStaticMemberFunction(MyClass *my_class_object)
{
    if (!my_class_object)
    {
        boost::log::sources::logger local_logger;
        BOOST_LOG(local_logger) << "MyStaticFunction:: invalid input data.";
        return;
    }
    BOOST_LOG(my_class_object->GetLogger()) << "log message.";
}

С Уважением.

person aleksandrm8    schedule 09.06.2014