使用静态工厂方法升级:: log

时间:2014-02-25 14:49:49

标签: c++ factory boost-log

我尝试使用boost :: log库实现日志记录。我将logger声明为私有类成员,但是当我使用静态工厂方法来到一个类时,我知道了一个问题。 错误消息是:    在静态成员函数中无效使用成员'MyObjectContainer :: slg'。 我想避免使用全局记录器,还有其他解决方案吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

有几种解决方案。

1)您可以在静态函数中使用局部变量。像这样:

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

2)您可以将指向您的类对象的指针作为函数参数传输。在这种情况下,您还应该为您的班级添加“get function”。像这样:

// 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.";
}

问候。