gpt4 book ai didi

logging - 如何使用 Poco 记录器

转载 作者:行者123 更新时间:2023-12-04 16:48:44 30 4
gpt4 key购买 nike

我是 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::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;
}

最佳答案

Logger::get() 是否以单例方式授予对全局 Logger 对象池的访问权限?

如果您运行上面的代码片段会发生什么,即当您在 main() 中初始化记录器并通过 myClass::myFun() 中引用它时会发生什么>Logger::get( "TestLogger")?那应该工作得很好。

当然,您无权访问 myClass::myFun() 中的 main()Logger& 引用,但您应该能够通过 Logger::get() 访问它。

关于logging - 如何使用 Poco 记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31857494/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com