接口与个人记录器

Interface vs. Individual Loggers

本文关键字:记录器 接口      更新时间:2023-10-16

我想在我正在做的一个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实现这样一个接口的本质?例如,哪些需要私有哪些需要公有等等

是的,你不应该在你的类中重新实现日志。这是在重复你自己,混淆每个班级的职责。决定使用哪个log4cxx::LoggerPtr听起来像是调用类不应该关心的事情,听起来像是应该在Logger类内部做出决定的决定

但是,不要在类中创建实例。为日志记录器创建一个抽象类,并将其传递给类的构造函数。不要将您的类绑定到一个日志记录器实现,而应该在更高的位置或在您的IOC配置代码中选择它。(我从未在c++中使用过IOC,但这个看起来不错。顺便提一下,使用多个日志记录器实现是否可以解决多个log4cxx::LoggerPtr问题?

我实际上会争辩选择如何将发生的事情格式化为可读的std::string msg是日志记录器的工作,而不是类。我将发送一些抽象的Event类到日志记录器。我一直在努力记住这个模式被称为什么(如果它甚至是一个模式),这里是它在另一种语言中的一个例子