2015-08-06 4 views
2

Я новичок в 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; 
} 

ответ

2

ли не Logger::get() доступ грантовую глобального пула Logger объектов, как синглтон?

Что произойдет, если вы запустите свой фрагмент кода выше, то есть когда вы инициализируете свой регистратор в main() и ссылаетесь на него в myClass::myFun() через Logger::get("TestLogger")? Это должно работать нормально.

Конечно, вы не имеете доступа к main() сек Logger& ссылки myClass::myFun(), но вы должны быть в состоянии достигнуть его через Logger::get().

Смежные вопросы