gpt4 book ai didi

c++ - 接口(interface)与个人记录器

转载 作者:行者123 更新时间:2023-11-28 02:18:51 24 4
gpt4 key购买 nike

我想在我正在处理的 C++ 项目中实现记录器。我想知道在每个类中单独实现一个记录器,还是拥有一个日志记录接口(interface)并使用 log4cxx 库在每个类中实例化它的实例是否更好。我有几个我想实现的记录器,可以在现有类中记录事件。

在使用日志接口(interface)时,我的意思是:

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 所做的事情是正确的做法吗?因为我需要能够选择要使用的记录器。

另外,如果创建一个日志接口(interface)更好,有人可以推荐一个很好的例子,在这个例子中可以看到如何使用 log4cxx 实现这样一个接口(interface)的细节吗?因此,例如,什么需要私有(private),什么需要公开等。

最佳答案

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

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

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

关于c++ - 接口(interface)与个人记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33208980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com