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

Implement Minimal logging program in c++

本文关键字:日志 程序 实现 c++      更新时间:2023-10-16

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

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实例。您可以通过区分不同类型的日志事件来使它更漂亮一些。

看看Dr Dobs文章中这个简单日志系统的实现:http://drdobbs.com/cpp/201804215

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