Этот вопрос может быть опущен, потому что он слишком прост - но я не уверен в том шаблоне, которому я должен следовать для объектов такого типа.
Я хотел бы сохранить экземпляр 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), кажется, указывает на то, чтоЯ сделал здесь правильно.
Я бы подумал, что я испортил мое понимание указателей здесь (почему я передаю адреса через &, а не указатель через косвенное обращение). Может кто-нибудь объяснитьмне, как я могу это исправить / где я ошибся?
Спасибо!