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