【发布时间】:2024-01-17 21:20:01
【问题描述】:
我是 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;
}
我尝试创建一个全局记录器,它也可以在我的应用程序中的其他函数和类中使用(示例代码如下)。
在上面的例子中,logger 在 main 中声明和初始化,如果我不将 logger 传递给 myFun,我不能在 myClass 中使用它(我不想将 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;
}
【问题讨论】: