Проблемы с пониманием того, как хранить экземпляр логгера log4cpp в классе - PullRequest
0 голосов
/ 31 октября 2019

Этот вопрос может быть опущен, потому что он слишком прост - но я не уверен в том шаблоне, которому я должен следовать для объектов такого типа.

Я хотел бы сохранить экземпляр log4cpp loggerв классе, поэтому мне нужно создать его экземпляр только один раз. Это, по моему мнению, поможет мне сохранить мой код в чистоте.

Представьте, что у меня есть такой класс:

#include <log4cpp/Category.hh>
#include <log4cpp/Appender.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/OstreamAppender.hh>
#include <log4cpp/Layout.hh>
#include <log4cpp/BasicLayout.hh>
#include <log4cpp/Priority.hh>

class ExampleClass {
private:
    log4cpp::Category& logger;

public:
    ExampleClass();
   ~ExampleClass();
}

С реализацией:

ExampleClass::ExampleClass() {
    log4cpp::Appender *appender1 = new log4cpp::OstreamAppender("console", &std::cout);
    appender1->setLayout(new log4cpp::BasicLayout());

    log4cpp::Appender *appender2 = new log4cpp::FileAppender("default", "output.log");
    appender2->setLayout(new log4cpp::BasicLayout());

    logger = log4cpp::Category::getRoot();
    logger.setPriority(log4cpp::Priority::WARN);
    logger.addAppender(appender1);
    logger.addAppender(appender2);

}

Согласно документации (http://log4cpp.sourceforge.net/#simpleexample) функция log4cpp::Category::getRoot() возвращает log4cpp::Category&. Естественно, я хотел бы сохранить это (как показано выше).

К сожалению, это неработать. Я получаю следующую ошибку из своей IDE: operator = is a private member of log4cpp::Category. Теперь я понял, что попал мне в голову. Я запутался, особенно учитывая документацию к классу (http://log4cpp.sourceforge.net/api/classlog4cpp_1_1Category.html), кажется, указывает на то, чтоЯ сделал здесь правильно.

Я бы подумал, что я испортил мое понимание указателей здесь (почему я передаю адреса через &, а не указатель через косвенное обращение). Может кто-нибудь объяснитьмне, как я могу это исправить / где я ошибся?

Спасибо!

...