【发布时间】:2016-01-17 11:30:06
【问题描述】:
我想在我正在处理的 C++ 项目中实现记录器。我想知道是在每个类中单独实现一个记录器,还是使用一个日志接口并使用 log4cxx 库在每个类中实例化它的一个实例会更好。我有一些我想实现的记录器,它们可以记录现有类中的事件。
在使用日志接口时,我的意思是:
class Logger
{
private:
log4cxx::LoggerPtr firstLogger(log4cxx::Logger::getLogger("first.log"));
log4cxx::LoggerPtr secondLogger(log4cxx::Logger::getLogger("second.log"));
public:
virtual void writeLogMessage(log4cxx::LoggerPtd logger, std::string msg);
};
通过 LoggerPtr 传递我正在做的事情是正确的做法吗?因为我需要能够选择要使用的记录器。
另外,如果创建一个日志接口更好,有人可以提出一个很好的例子,让人们可以看到如何使用 log4cxx 实现这样的接口的本质?因此,例如,什么需要私有,什么需要公开等。
【问题讨论】:
-
Loggers 实际上是singleton pattern 有用的地方之一。只有 一个 记录器实例,并在需要时使用它。
-
至于如何“选择”要使用的记录器,您可以将其包装在预处理器宏中,因此您只需编写例如
LOG1("...")并且该宏将获取正确的记录器并使用记录器调用写入函数。