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