在c ++中实现最小的日志记录程序

时间:2011-11-30 17:29:52

标签: c++

我正在为数据库引擎开发基于磁盘的树,我喜欢为我的程序维护一个日志文件。我基本上需要日志程序中的两种功能。它必须允许我将消息记录到日志文件中,并且还必须写入我将其作为参数传递到日志文件中的任何变量。我只需要这两个功能。第一个是相当简单的实现,但我发现很难实现第二个。我想将任意类型的任意数量的参数传递给日志程序,以将其写入日志文件。我尝试使用变量参数函数实现第二个,但问题是我们必须知道传递的变量的类型。我相信必须有某种方法来做到这一点。有谁可以启发我这个?

2 个答案:

答案 0 :(得分:1)

log4C++提供您正在寻找的功能。

如果这对你来说有点太重,你可以使用模板做类似的事情。类似的东西:

class log
{
private:
  std::ostream& stream;

public:
  log(std::ostream& src) : stream(src) {}

...

  std::ostream& getStream() { return stream; }
}

template <typename T> log& operator<<(log&, const T& val)
{
  log.getStream() << val;
  return log;
}

此处log::stream是您为输出到文件,控制台或其他任何内容而定义的std::ostream实例。您可以通过区分不同类型的日志记录事件来使它更有趣。

答案 1 :(得分:0)

从Dr. Dobs文章http://drdobbs.com/cpp/201804215

看一下这个简单日志系统的实现

它是基于模板的,具有日志记录级别(如果不需要,在运行时不会产生任何开销)并且很小