我想在我正在处理的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实现这样一个接口的细节吗?因此,例如,什么需要私有,什么需要公开等。
答案 0 :(得分:1)
是的,您不应该在课程中重新实施日志记录。它重复着自己并且混淆了每个班级的责任。决定使用哪个log4cxx::LoggerPtr
听起来像调用类不应该关心并且听起来像是应该在Logger类中做出决定的决定
log4cxx::LoggerPtr
问题吗?
我实际上认为选择如何格式化已经发生在可读std::string msg
中的东西是记录器的工作,而不是类。我会将一些抽象的Event
类发送到记录器。我一直在努力记住这个模式被称为什么(如果它甚至是模式),here's an example of it in another language