我是Poco的新手,我在Poco在线帮助中看到了以下示例:
int main(int argc, char** argv)
{
AutoPtr<SimpleFileChannel> pChannel(new SimpleFileChannel);
pChannel->setProperty("path", "sample.log");
pChannel->setProperty("rotation", "2 K");
Logger::root().setChannel(pChannel);
Logger& logger = Logger::get("TestLogger"); // inherits root channel
for (int i = 0; i < 100; ++i)
logger.information("Testing SimpleFileChannel");
return 0;
}
我尝试创建一个全局记录器,可以在我的应用程序中的其他函数和类中使用(示例代码如下)。
在上面的示例中,记录器在main中声明并初始化,如果我没有将记录器传递给myClass
,我无法在myFun
中使用它(我不想要传递logger作为参数,它看起来很尴尬,因为我需要在整个应用程序中使用记录器,在多个文件中);我试过这种方式:将Logger& logger = Logger::get("TestLogger");
放在main()
之外,作为全局变量,main中的所有其他部分保持不变,但这不起作用,我运行后不生成sample.log应用程序。我不能这样做:只需在函数外部声明Logger& logger
,然后在main()
中初始化它,因为logger是一个必须在声明时初始化的引用。怎么做?
class myClass
{
public:
myClass() { }
~myClass() { }
myFun() { /*calling logger...*/ }
};
int main(int argc, char** argv)
{
AutoPtr<SimpleFileChannel> pChannel(new SimpleFileChannel);
pChannel->setProperty("path", "sample.log");
pChannel->setProperty("rotation", "2 K");
Logger::root().setChannel(pChannel);
Logger& logger = Logger::get("TestLogger"); // inherits root channel
logger.information("starting up");
myClass aClass;
aClass.myFun();
return 0;
}
答案 0 :(得分:2)
没有Logger::get()
作为单身人员授予对Logger
个对象的全局池的访问权限吗?
如果您在上面运行代码段,即在main()
中初始化记录器并通过myClass::myFun()
在Logger::get( "TestLogger" )
中引用它时,会发生什么?这应该可以正常工作。
当然,您无法访问main()
中的Logger&
myClass::myFun()
个引用,但您应该可以通过Logger::get()
与其联系。