Я новичок в Poco, я увидел следующий пример в Poco интерактивной справки:Как использовать Poco 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
for (int i = 0; i < 100; ++i)
logger.information("Testing SimpleFileChannel");
return 0;
}
Я попытался создать глобальный регистратор, который может быть использован в других функций и классов в моем приложении, как (пример кода ниже). В приведенном выше примере регистратор объявлен и инициализирован в основном, я не могу использовать его в myClass
, если я не передаю регистратор на myFun
(я не хочу передавать логист в качестве аргумента, это выглядит неудобно, так как я буду необходимо использовать регистратор во всем приложении, в нескольких файлах); Я пробовал этот путь: положил Logger& logger = Logger::get("TestLogger");
вне main()
, как глобальная переменная, все остальные части в основном остаются прежними, однако это не работает, sample.log не создается после запуска приложения. Я не могу так: просто объявить Logger& logger
вне функции, а затем инициализировать ее в main()
, потому что журнал - это ссылка, которая должна быть инициализирована при объявлении. Как это сделать?
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;
}