接口与个人记录器

时间:2015-10-19 07:36:17

标签: c++ logging log4cxx

我想在我正在处理的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实现这样一个接口的细节吗?因此,例如,什么需要私有,什么需要公开等。

1 个答案:

答案 0 :(得分:1)

是的,您不应该在课程中重新实施日志记录。它重复着自己并且混淆了每个班级的责任。决定使用哪个log4cxx::LoggerPtr听起来像调用类不应该关心并且听起来像是应该在Logger类中做出决定的决定

但是,不要在课程中创建实例。为记录器创建一个抽象类,并将其传递给类的构造函数。不要将您的类绑定到一个记录器实现,而是将其选择在更高的位置或在您的IOC配置代码中。 (我从来没有在C ++中使用过IOC,but this one看起来不错。顺便说一下,你的记录器的多个实现会解决多个log4cxx::LoggerPtr问题吗?

我实际上认为选择如何格式化已经发生在可读std::string msg中的东西是记录器的工作,而不是类。我会将一些抽象的Event类发送到记录器。我一直在努力记住这个模式被称为什么(如果它甚至是模式),here's an example of it in another language